nested_serializers.py 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. from rest_framework import serializers
  2. from dcim.constants import CONNECTION_STATUS_CHOICES
  3. from dcim.models import (
  4. Cable, ConsolePort, ConsoleServerPort, Device, DeviceBay, DeviceType, DeviceRole, FrontPort, FrontPortTemplate,
  5. Interface, Manufacturer, Platform, PowerOutlet, PowerPort, Rack, RackGroup, RackRole, RearPort, RearPortTemplate,
  6. Region, Site, VirtualChassis,
  7. )
  8. from utilities.api import ChoiceField, WritableNestedSerializer
  9. __all__ = [
  10. 'NestedCableSerializer',
  11. 'NestedConsolePortSerializer',
  12. 'NestedConsoleServerPortSerializer',
  13. 'NestedDeviceBaySerializer',
  14. 'NestedDeviceRoleSerializer',
  15. 'NestedDeviceSerializer',
  16. 'NestedDeviceTypeSerializer',
  17. 'NestedFrontPortSerializer',
  18. 'NestedFrontPortTemplateSerializer',
  19. 'NestedInterfaceSerializer',
  20. 'NestedManufacturerSerializer',
  21. 'NestedPlatformSerializer',
  22. 'NestedPowerOutletSerializer',
  23. 'NestedPowerPortSerializer',
  24. 'NestedRackGroupSerializer',
  25. 'NestedRackRoleSerializer',
  26. 'NestedRackSerializer',
  27. 'NestedRearPortSerializer',
  28. 'NestedRearPortTemplateSerializer',
  29. 'NestedRegionSerializer',
  30. 'NestedSiteSerializer',
  31. 'NestedVirtualChassisSerializer',
  32. ]
  33. #
  34. # Regions/sites
  35. #
  36. class NestedRegionSerializer(WritableNestedSerializer):
  37. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:region-detail')
  38. class Meta:
  39. model = Region
  40. fields = ['id', 'url', 'name', 'slug']
  41. class NestedSiteSerializer(WritableNestedSerializer):
  42. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:site-detail')
  43. class Meta:
  44. model = Site
  45. fields = ['id', 'url', 'name', 'slug']
  46. #
  47. # Racks
  48. #
  49. class NestedRackGroupSerializer(WritableNestedSerializer):
  50. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rackgroup-detail')
  51. class Meta:
  52. model = RackGroup
  53. fields = ['id', 'url', 'name', 'slug']
  54. class NestedRackRoleSerializer(WritableNestedSerializer):
  55. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rackrole-detail')
  56. class Meta:
  57. model = RackRole
  58. fields = ['id', 'url', 'name', 'slug']
  59. class NestedRackSerializer(WritableNestedSerializer):
  60. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rack-detail')
  61. class Meta:
  62. model = Rack
  63. fields = ['id', 'url', 'name', 'display_name']
  64. #
  65. # Device types
  66. #
  67. class NestedManufacturerSerializer(WritableNestedSerializer):
  68. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:manufacturer-detail')
  69. class Meta:
  70. model = Manufacturer
  71. fields = ['id', 'url', 'name', 'slug']
  72. class NestedDeviceTypeSerializer(WritableNestedSerializer):
  73. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicetype-detail')
  74. manufacturer = NestedManufacturerSerializer(read_only=True)
  75. class Meta:
  76. model = DeviceType
  77. fields = ['id', 'url', 'manufacturer', 'model', 'slug']
  78. class NestedRearPortTemplateSerializer(WritableNestedSerializer):
  79. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearporttemplate-detail')
  80. class Meta:
  81. model = RearPortTemplate
  82. fields = ['id', 'url', 'name']
  83. class NestedFrontPortTemplateSerializer(WritableNestedSerializer):
  84. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:frontporttemplate-detail')
  85. class Meta:
  86. model = FrontPortTemplate
  87. fields = ['id', 'url', 'name']
  88. #
  89. # Devices
  90. #
  91. class NestedDeviceRoleSerializer(WritableNestedSerializer):
  92. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicerole-detail')
  93. class Meta:
  94. model = DeviceRole
  95. fields = ['id', 'url', 'name', 'slug']
  96. class NestedPlatformSerializer(WritableNestedSerializer):
  97. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:platform-detail')
  98. class Meta:
  99. model = Platform
  100. fields = ['id', 'url', 'name', 'slug']
  101. class NestedDeviceSerializer(WritableNestedSerializer):
  102. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:device-detail')
  103. class Meta:
  104. model = Device
  105. fields = ['id', 'url', 'name', 'display_name']
  106. class NestedConsoleServerPortSerializer(WritableNestedSerializer):
  107. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:consoleserverport-detail')
  108. device = NestedDeviceSerializer(read_only=True)
  109. connection_status = ChoiceField(choices=CONNECTION_STATUS_CHOICES, read_only=True)
  110. class Meta:
  111. model = ConsoleServerPort
  112. fields = ['id', 'url', 'device', 'name', 'cable', 'connection_status']
  113. class NestedConsolePortSerializer(WritableNestedSerializer):
  114. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:consoleport-detail')
  115. device = NestedDeviceSerializer(read_only=True)
  116. connection_status = ChoiceField(choices=CONNECTION_STATUS_CHOICES, read_only=True)
  117. class Meta:
  118. model = ConsolePort
  119. fields = ['id', 'url', 'device', 'name', 'cable', 'connection_status']
  120. class NestedPowerOutletSerializer(WritableNestedSerializer):
  121. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:poweroutlet-detail')
  122. device = NestedDeviceSerializer(read_only=True)
  123. connection_status = ChoiceField(choices=CONNECTION_STATUS_CHOICES, read_only=True)
  124. class Meta:
  125. model = PowerOutlet
  126. fields = ['id', 'url', 'device', 'name', 'cable', 'connection_status']
  127. class NestedPowerPortSerializer(WritableNestedSerializer):
  128. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:powerport-detail')
  129. device = NestedDeviceSerializer(read_only=True)
  130. connection_status = ChoiceField(choices=CONNECTION_STATUS_CHOICES, read_only=True)
  131. class Meta:
  132. model = PowerPort
  133. fields = ['id', 'url', 'device', 'name', 'cable', 'connection_status']
  134. class NestedInterfaceSerializer(WritableNestedSerializer):
  135. device = NestedDeviceSerializer(read_only=True)
  136. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:interface-detail')
  137. connection_status = ChoiceField(choices=CONNECTION_STATUS_CHOICES, read_only=True)
  138. class Meta:
  139. model = Interface
  140. fields = ['id', 'url', 'device', 'name', 'cable', 'connection_status']
  141. class NestedRearPortSerializer(WritableNestedSerializer):
  142. device = NestedDeviceSerializer(read_only=True)
  143. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearport-detail')
  144. class Meta:
  145. model = RearPort
  146. fields = ['id', 'url', 'device', 'name', 'cable']
  147. class NestedFrontPortSerializer(WritableNestedSerializer):
  148. device = NestedDeviceSerializer(read_only=True)
  149. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:frontport-detail')
  150. class Meta:
  151. model = FrontPort
  152. fields = ['id', 'url', 'device', 'name', 'cable']
  153. class NestedDeviceBaySerializer(WritableNestedSerializer):
  154. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearport-detail')
  155. device = NestedDeviceSerializer(read_only=True)
  156. class Meta:
  157. model = DeviceBay
  158. fields = ['id', 'url', 'device', 'name']
  159. #
  160. # Cables
  161. #
  162. class NestedCableSerializer(serializers.ModelSerializer):
  163. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:cable-detail')
  164. class Meta:
  165. model = Cable
  166. fields = ['id', 'url', 'label']
  167. #
  168. # Virtual chassis
  169. #
  170. class NestedVirtualChassisSerializer(WritableNestedSerializer):
  171. url = serializers.HyperlinkedIdentityField(view_name='dcim-api:virtualchassis-detail')
  172. master = NestedDeviceSerializer()
  173. class Meta:
  174. model = VirtualChassis
  175. fields = ['id', 'url', 'master']