1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Implement support for nested TenantGroups

This commit is contained in:
Jeremy Stretch
2020-03-11 20:20:04 -04:00
parent a4a276083a
commit 45f6ea211d
8 changed files with 163 additions and 22 deletions

View File

@@ -1,10 +1,12 @@
from django.contrib.contenttypes.fields import GenericRelation
from django.db import models
from django.urls import reverse
from mptt.models import MPTTModel, TreeForeignKey
from taggit.managers import TaggableManager
from extras.models import CustomFieldModel, TaggedItem
from extras.models import CustomFieldModel, ObjectChange, TaggedItem
from utilities.models import ChangeLoggedModel
from utilities.utils import serialize_object
__all__ = (
@@ -13,7 +15,7 @@ __all__ = (
)
class TenantGroup(ChangeLoggedModel):
class TenantGroup(MPTTModel, ChangeLoggedModel):
"""
An arbitrary collection of Tenants.
"""
@@ -24,12 +26,23 @@ class TenantGroup(ChangeLoggedModel):
slug = models.SlugField(
unique=True
)
parent = TreeForeignKey(
to='self',
on_delete=models.CASCADE,
related_name='children',
blank=True,
null=True,
db_index=True
)
csv_headers = ['name', 'slug']
csv_headers = ['name', 'slug', 'parent']
class Meta:
ordering = ['name']
class MPTTMeta:
order_insertion_by = ['name']
def __str__(self):
return self.name
@@ -40,6 +53,16 @@ class TenantGroup(ChangeLoggedModel):
return (
self.name,
self.slug,
self.parent.name if self.parent else '',
)
def to_objectchange(self, action):
# Remove MPTT-internal fields
return ObjectChange(
changed_object=self,
object_repr=str(self),
action=action,
object_data=serialize_object(self, exclude=['level', 'lft', 'rght', 'tree_id'])
)