mirror of
				https://github.com/netbox-community/netbox.git
				synced 2024-05-10 07:54:54 +00:00 
			
		
		
		
	
		
			
	
	
		
			94 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			94 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from django.contrib.contenttypes.fields import GenericRelation
							 | 
						||
| 
								 | 
							
								from django.db import models
							 | 
						||
| 
								 | 
							
								from django.urls import reverse
							 | 
						||
| 
								 | 
							
								from mptt.models import TreeForeignKey
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from extras.utils import extras_features
							 | 
						||
| 
								 | 
							
								from netbox.models import NestedGroupModel, PrimaryModel
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__all__ = (
							 | 
						||
| 
								 | 
							
								    'Tenant',
							 | 
						||
| 
								 | 
							
								    'TenantGroup',
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@extras_features('custom_fields', 'custom_links', 'export_templates', 'tags', 'webhooks')
							 | 
						||
| 
								 | 
							
								class TenantGroup(NestedGroupModel):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    An arbitrary collection of Tenants.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    name = models.CharField(
							 | 
						||
| 
								 | 
							
								        max_length=100,
							 | 
						||
| 
								 | 
							
								        unique=True
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    slug = models.SlugField(
							 | 
						||
| 
								 | 
							
								        max_length=100,
							 | 
						||
| 
								 | 
							
								        unique=True
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    parent = TreeForeignKey(
							 | 
						||
| 
								 | 
							
								        to='self',
							 | 
						||
| 
								 | 
							
								        on_delete=models.CASCADE,
							 | 
						||
| 
								 | 
							
								        related_name='children',
							 | 
						||
| 
								 | 
							
								        blank=True,
							 | 
						||
| 
								 | 
							
								        null=True,
							 | 
						||
| 
								 | 
							
								        db_index=True
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    description = models.CharField(
							 | 
						||
| 
								 | 
							
								        max_length=200,
							 | 
						||
| 
								 | 
							
								        blank=True
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    class Meta:
							 | 
						||
| 
								 | 
							
								        ordering = ['name']
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def get_absolute_url(self):
							 | 
						||
| 
								 | 
							
								        return reverse('tenancy:tenantgroup', args=[self.pk])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@extras_features('custom_fields', 'custom_links', 'export_templates', 'tags', 'webhooks')
							 | 
						||
| 
								 | 
							
								class Tenant(PrimaryModel):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    A Tenant represents an organization served by the NetBox owner. This is typically a customer or an internal
							 | 
						||
| 
								 | 
							
								    department.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    name = models.CharField(
							 | 
						||
| 
								 | 
							
								        max_length=100,
							 | 
						||
| 
								 | 
							
								        unique=True
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    slug = models.SlugField(
							 | 
						||
| 
								 | 
							
								        max_length=100,
							 | 
						||
| 
								 | 
							
								        unique=True
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    group = models.ForeignKey(
							 | 
						||
| 
								 | 
							
								        to='tenancy.TenantGroup',
							 | 
						||
| 
								 | 
							
								        on_delete=models.SET_NULL,
							 | 
						||
| 
								 | 
							
								        related_name='tenants',
							 | 
						||
| 
								 | 
							
								        blank=True,
							 | 
						||
| 
								 | 
							
								        null=True
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    description = models.CharField(
							 | 
						||
| 
								 | 
							
								        max_length=200,
							 | 
						||
| 
								 | 
							
								        blank=True
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    comments = models.TextField(
							 | 
						||
| 
								 | 
							
								        blank=True
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # Generic relations
							 | 
						||
| 
								 | 
							
								    contacts = GenericRelation(
							 | 
						||
| 
								 | 
							
								        to='tenancy.ContactAssignment'
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    clone_fields = [
							 | 
						||
| 
								 | 
							
								        'group', 'description',
							 | 
						||
| 
								 | 
							
								    ]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    class Meta:
							 | 
						||
| 
								 | 
							
								        ordering = ['name']
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def __str__(self):
							 | 
						||
| 
								 | 
							
								        return self.name
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def get_absolute_url(self):
							 | 
						||
| 
								 | 
							
								        return reverse('tenancy:tenant', args=[self.pk])
							 |