tenants.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. from django.contrib.contenttypes.fields import GenericRelation
  2. from django.db import models
  3. from django.urls import reverse
  4. from mptt.models import TreeForeignKey
  5. from extras.utils import extras_features
  6. from netbox.models import NestedGroupModel, PrimaryModel
  7. __all__ = (
  8. 'Tenant',
  9. 'TenantGroup',
  10. )
  11. @extras_features('custom_fields', 'custom_links', 'export_templates', 'tags', 'webhooks')
  12. class TenantGroup(NestedGroupModel):
  13. """
  14. An arbitrary collection of Tenants.
  15. """
  16. name = models.CharField(
  17. max_length=100,
  18. unique=True
  19. )
  20. slug = models.SlugField(
  21. max_length=100,
  22. unique=True
  23. )
  24. parent = TreeForeignKey(
  25. to='self',
  26. on_delete=models.CASCADE,
  27. related_name='children',
  28. blank=True,
  29. null=True,
  30. db_index=True
  31. )
  32. description = models.CharField(
  33. max_length=200,
  34. blank=True
  35. )
  36. class Meta:
  37. ordering = ['name']
  38. def get_absolute_url(self):
  39. return reverse('tenancy:tenantgroup', args=[self.pk])
  40. @extras_features('custom_fields', 'custom_links', 'export_templates', 'tags', 'webhooks')
  41. class Tenant(PrimaryModel):
  42. """
  43. A Tenant represents an organization served by the NetBox owner. This is typically a customer or an internal
  44. department.
  45. """
  46. name = models.CharField(
  47. max_length=100,
  48. unique=True
  49. )
  50. slug = models.SlugField(
  51. max_length=100,
  52. unique=True
  53. )
  54. group = models.ForeignKey(
  55. to='tenancy.TenantGroup',
  56. on_delete=models.SET_NULL,
  57. related_name='tenants',
  58. blank=True,
  59. null=True
  60. )
  61. description = models.CharField(
  62. max_length=200,
  63. blank=True
  64. )
  65. comments = models.TextField(
  66. blank=True
  67. )
  68. # Generic relations
  69. contacts = GenericRelation(
  70. to='tenancy.ContactAssignment'
  71. )
  72. clone_fields = [
  73. 'group', 'description',
  74. ]
  75. class Meta:
  76. ordering = ['name']
  77. def __str__(self):
  78. return self.name
  79. def get_absolute_url(self):
  80. return reverse('tenancy:tenant', args=[self.pk])