nested_serializers.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import warnings
  2. from drf_spectacular.utils import extend_schema_serializer
  3. from netbox.api.fields import RelatedObjectCountField
  4. from netbox.api.serializers import WritableNestedSerializer
  5. from virtualization.models import *
  6. from .serializers_.nested import NestedVirtualMachineSerializer, NestedVMInterfaceSerializer
  7. __all__ = [
  8. 'NestedClusterGroupSerializer',
  9. 'NestedClusterSerializer',
  10. 'NestedClusterTypeSerializer',
  11. 'NestedVirtualDiskSerializer',
  12. 'NestedVMInterfaceSerializer',
  13. 'NestedVirtualMachineSerializer',
  14. ]
  15. # TODO: Remove in v4.2
  16. warnings.warn(
  17. "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.",
  18. DeprecationWarning
  19. )
  20. #
  21. # Clusters
  22. #
  23. @extend_schema_serializer(
  24. exclude_fields=('cluster_count',),
  25. )
  26. class NestedClusterTypeSerializer(WritableNestedSerializer):
  27. cluster_count = RelatedObjectCountField('clusters')
  28. class Meta:
  29. model = ClusterType
  30. fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'cluster_count']
  31. @extend_schema_serializer(
  32. exclude_fields=('cluster_count',),
  33. )
  34. class NestedClusterGroupSerializer(WritableNestedSerializer):
  35. cluster_count = RelatedObjectCountField('clusters')
  36. class Meta:
  37. model = ClusterGroup
  38. fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'cluster_count']
  39. @extend_schema_serializer(
  40. exclude_fields=('virtualmachine_count',),
  41. )
  42. class NestedClusterSerializer(WritableNestedSerializer):
  43. virtualmachine_count = RelatedObjectCountField('virtual_machines')
  44. class Meta:
  45. model = Cluster
  46. fields = ['id', 'url', 'display_url', 'display', 'name', 'virtualmachine_count']
  47. #
  48. # Virtual machines
  49. #
  50. class NestedVirtualDiskSerializer(WritableNestedSerializer):
  51. virtual_machine = NestedVirtualMachineSerializer(read_only=True)
  52. class Meta:
  53. model = VirtualDisk
  54. fields = ['id', 'url', 'display_url', 'display', 'virtual_machine', 'name', 'size']