models.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 extras.models import CustomFieldModel, CustomFieldValue
  7. from utilities.models import CreatedUpdatedModel
  8. @python_2_unicode_compatible
  9. class TenantGroup(models.Model):
  10. """
  11. An arbitrary collection of Tenants.
  12. """
  13. name = models.CharField(max_length=50, unique=True)
  14. slug = models.SlugField(unique=True)
  15. csv_headers = ['name', 'slug']
  16. class Meta:
  17. ordering = ['name']
  18. def __str__(self):
  19. return self.name
  20. def get_absolute_url(self):
  21. return "{}?group={}".format(reverse('tenancy:tenant_list'), self.slug)
  22. def to_csv(self):
  23. return (
  24. self.name,
  25. self.slug,
  26. )
  27. @python_2_unicode_compatible
  28. class Tenant(CreatedUpdatedModel, CustomFieldModel):
  29. """
  30. A Tenant represents an organization served by the NetBox owner. This is typically a customer or an internal
  31. department.
  32. """
  33. name = models.CharField(max_length=30, unique=True)
  34. slug = models.SlugField(unique=True)
  35. group = models.ForeignKey('TenantGroup', related_name='tenants', blank=True, null=True, on_delete=models.SET_NULL)
  36. description = models.CharField(max_length=100, blank=True, help_text="Long-form name (optional)")
  37. comments = models.TextField(blank=True)
  38. custom_field_values = GenericRelation(CustomFieldValue, content_type_field='obj_type', object_id_field='obj_id')
  39. csv_headers = ['name', 'slug', 'group', 'description', 'comments']
  40. class Meta:
  41. ordering = ['group', 'name']
  42. def __str__(self):
  43. return self.name
  44. def get_absolute_url(self):
  45. return reverse('tenancy:tenant', args=[self.slug])
  46. def to_csv(self):
  47. return (
  48. self.name,
  49. self.slug,
  50. self.group.name if self.group else None,
  51. self.description,
  52. self.comments,
  53. )