tenants.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from rest_framework import serializers
  2. from netbox.api.fields import RelatedObjectCountField
  3. from netbox.api.serializers import NestedGroupModelSerializer, NetBoxModelSerializer
  4. from tenancy.models import Tenant, TenantGroup
  5. from ..nested_serializers import *
  6. __all__ = (
  7. 'TenantGroupSerializer',
  8. 'TenantSerializer',
  9. )
  10. class TenantGroupSerializer(NestedGroupModelSerializer):
  11. url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:tenantgroup-detail')
  12. parent = NestedTenantGroupSerializer(required=False, allow_null=True)
  13. tenant_count = serializers.IntegerField(read_only=True, default=0)
  14. class Meta:
  15. model = TenantGroup
  16. fields = [
  17. 'id', 'url', 'display', 'name', 'slug', 'parent', 'description', 'tags', 'custom_fields', 'created',
  18. 'last_updated', 'tenant_count', '_depth',
  19. ]
  20. brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'tenant_count', '_depth')
  21. class TenantSerializer(NetBoxModelSerializer):
  22. url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:tenant-detail')
  23. group = TenantGroupSerializer(nested=True, required=False, allow_null=True, default=None)
  24. # Related object counts
  25. circuit_count = RelatedObjectCountField('circuits')
  26. device_count = RelatedObjectCountField('devices')
  27. rack_count = RelatedObjectCountField('racks')
  28. site_count = RelatedObjectCountField('sites')
  29. ipaddress_count = RelatedObjectCountField('ip_addresses')
  30. prefix_count = RelatedObjectCountField('prefixes')
  31. vlan_count = RelatedObjectCountField('vlans')
  32. vrf_count = RelatedObjectCountField('vrfs')
  33. virtualmachine_count = RelatedObjectCountField('virtual_machines')
  34. cluster_count = RelatedObjectCountField('clusters')
  35. class Meta:
  36. model = Tenant
  37. fields = [
  38. 'id', 'url', 'display', 'name', 'slug', 'group', 'description', 'comments', 'tags', 'custom_fields',
  39. 'created', 'last_updated', 'circuit_count', 'device_count', 'ipaddress_count', 'prefix_count', 'rack_count',
  40. 'site_count', 'virtualmachine_count', 'vlan_count', 'vrf_count', 'cluster_count',
  41. ]
  42. brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description')