nested_serializers.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from rest_framework import serializers
  2. from dcim.models import Interface
  3. from netbox.api import WritableNestedSerializer
  4. from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine
  5. __all__ = [
  6. 'NestedClusterGroupSerializer',
  7. 'NestedClusterSerializer',
  8. 'NestedClusterTypeSerializer',
  9. 'NestedVMInterfaceSerializer',
  10. 'NestedVirtualMachineSerializer',
  11. ]
  12. #
  13. # Clusters
  14. #
  15. class NestedClusterTypeSerializer(WritableNestedSerializer):
  16. url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustertype-detail')
  17. cluster_count = serializers.IntegerField(read_only=True)
  18. class Meta:
  19. model = ClusterType
  20. fields = ['id', 'url', 'name', 'slug', 'cluster_count']
  21. class NestedClusterGroupSerializer(WritableNestedSerializer):
  22. url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustergroup-detail')
  23. cluster_count = serializers.IntegerField(read_only=True)
  24. class Meta:
  25. model = ClusterGroup
  26. fields = ['id', 'url', 'name', 'slug', 'cluster_count']
  27. class NestedClusterSerializer(WritableNestedSerializer):
  28. url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:cluster-detail')
  29. virtualmachine_count = serializers.IntegerField(read_only=True)
  30. class Meta:
  31. model = Cluster
  32. fields = ['id', 'url', 'name', 'virtualmachine_count']
  33. #
  34. # Virtual machines
  35. #
  36. class NestedVirtualMachineSerializer(WritableNestedSerializer):
  37. url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:virtualmachine-detail')
  38. class Meta:
  39. model = VirtualMachine
  40. fields = ['id', 'url', 'name']
  41. class NestedVMInterfaceSerializer(WritableNestedSerializer):
  42. url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:vminterface-detail')
  43. virtual_machine = NestedVirtualMachineSerializer(read_only=True)
  44. class Meta:
  45. model = Interface
  46. fields = ['id', 'url', 'virtual_machine', 'name']