nested_serializers.py 2.2 KB

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