models.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from django.contrib.contenttypes.fields import GenericRelation
  2. from django.core.urlresolvers import reverse
  3. from django.db import models
  4. from extras.models import CustomFieldModel, CustomFieldValue
  5. from utilities.models import CreatedUpdatedModel
  6. class TenantGroup(models.Model):
  7. """
  8. An arbitrary collection of Tenants.
  9. """
  10. name = models.CharField(max_length=50, unique=True)
  11. slug = models.SlugField(unique=True)
  12. class Meta:
  13. ordering = ['name']
  14. def __unicode__(self):
  15. return self.name
  16. def get_absolute_url(self):
  17. return "{}?group={}".format(reverse('tenancy:tenant_list'), self.slug)
  18. class Tenant(CreatedUpdatedModel, CustomFieldModel):
  19. """
  20. A Tenant represents an organization served by the NetBox owner. This is typically a customer or an internal
  21. department.
  22. """
  23. name = models.CharField(max_length=30, unique=True)
  24. slug = models.SlugField(unique=True)
  25. group = models.ForeignKey('TenantGroup', related_name='tenants', blank=True, null=True, on_delete=models.SET_NULL)
  26. description = models.CharField(max_length=100, blank=True, help_text="Long-form name (optional)")
  27. comments = models.TextField(blank=True)
  28. custom_field_values = GenericRelation(CustomFieldValue, content_type_field='obj_type', object_id_field='obj_id')
  29. class Meta:
  30. ordering = ['group', 'name']
  31. def __unicode__(self):
  32. return self.name
  33. def get_absolute_url(self):
  34. return reverse('tenancy:tenant', args=[self.slug])
  35. def to_csv(self):
  36. return ','.join([
  37. self.name,
  38. self.slug,
  39. self.group.name,
  40. self.description,
  41. ])