models.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. from __future__ import unicode_literals
  2. from django.contrib.contenttypes.fields import GenericRelation
  3. from django.db import models
  4. from django.urls import reverse
  5. from django.utils.encoding import python_2_unicode_compatible
  6. from taggit.managers import TaggableManager
  7. from extras.models import CustomFieldModel
  8. from utilities.models import ChangeLoggedModel
  9. @python_2_unicode_compatible
  10. class TenantGroup(ChangeLoggedModel):
  11. """
  12. An arbitrary collection of Tenants.
  13. """
  14. name = models.CharField(
  15. max_length=50,
  16. unique=True
  17. )
  18. slug = models.SlugField(
  19. unique=True
  20. )
  21. serializer = 'tenancy.api.serializers.TenantGroupSerializer'
  22. csv_headers = ['name', 'slug']
  23. class Meta:
  24. ordering = ['name']
  25. def __str__(self):
  26. return self.name
  27. def get_absolute_url(self):
  28. return "{}?group={}".format(reverse('tenancy:tenant_list'), self.slug)
  29. def to_csv(self):
  30. return (
  31. self.name,
  32. self.slug,
  33. )
  34. @python_2_unicode_compatible
  35. class Tenant(ChangeLoggedModel, CustomFieldModel):
  36. """
  37. A Tenant represents an organization served by the NetBox owner. This is typically a customer or an internal
  38. department.
  39. """
  40. name = models.CharField(
  41. max_length=30,
  42. unique=True
  43. )
  44. slug = models.SlugField(
  45. unique=True
  46. )
  47. group = models.ForeignKey(
  48. to='tenancy.TenantGroup',
  49. on_delete=models.SET_NULL,
  50. related_name='tenants',
  51. blank=True,
  52. null=True
  53. )
  54. description = models.CharField(
  55. max_length=100,
  56. blank=True,
  57. help_text='Long-form name (optional)'
  58. )
  59. comments = models.TextField(
  60. blank=True
  61. )
  62. custom_field_values = GenericRelation(
  63. to='extras.CustomFieldValue',
  64. content_type_field='obj_type',
  65. object_id_field='obj_id'
  66. )
  67. tags = TaggableManager()
  68. serializer = 'tenancy.api.serializers.TenantSerializer'
  69. csv_headers = ['name', 'slug', 'group', 'description', 'comments']
  70. class Meta:
  71. ordering = ['group', 'name']
  72. def __str__(self):
  73. return self.name
  74. def get_absolute_url(self):
  75. return reverse('tenancy:tenant', args=[self.slug])
  76. def to_csv(self):
  77. return (
  78. self.name,
  79. self.slug,
  80. self.group.name if self.group else None,
  81. self.description,
  82. self.comments,
  83. )