nested.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. from drf_spectacular.utils import extend_schema_serializer
  2. from rest_framework import serializers
  3. from netbox.api.serializers import WritableNestedSerializer
  4. from dcim import models
  5. __all__ = (
  6. 'NestedDeviceBaySerializer',
  7. 'NestedDeviceRoleSerializer',
  8. 'NestedDeviceSerializer',
  9. 'NestedInterfaceSerializer',
  10. 'NestedInterfaceTemplateSerializer',
  11. 'NestedLocationSerializer',
  12. 'NestedModuleBaySerializer',
  13. 'NestedPlatformSerializer',
  14. 'NestedRegionSerializer',
  15. 'NestedSiteGroupSerializer',
  16. )
  17. @extend_schema_serializer(
  18. exclude_fields=('site_count',),
  19. )
  20. class NestedRegionSerializer(WritableNestedSerializer):
  21. site_count = serializers.IntegerField(read_only=True)
  22. _depth = serializers.IntegerField(source='level', read_only=True)
  23. class Meta:
  24. model = models.Region
  25. fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'site_count', '_depth']
  26. @extend_schema_serializer(
  27. exclude_fields=('site_count',),
  28. )
  29. class NestedSiteGroupSerializer(WritableNestedSerializer):
  30. site_count = serializers.IntegerField(read_only=True)
  31. _depth = serializers.IntegerField(source='level', read_only=True)
  32. class Meta:
  33. model = models.SiteGroup
  34. fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'site_count', '_depth']
  35. @extend_schema_serializer(
  36. exclude_fields=('rack_count',),
  37. )
  38. class NestedLocationSerializer(WritableNestedSerializer):
  39. rack_count = serializers.IntegerField(read_only=True)
  40. _depth = serializers.IntegerField(source='level', read_only=True)
  41. class Meta:
  42. model = models.Location
  43. fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'rack_count', '_depth']
  44. class NestedDeviceRoleSerializer(WritableNestedSerializer):
  45. class Meta:
  46. model = models.DeviceRole
  47. fields = ['id', 'url', 'display_url', 'display', 'name']
  48. class NestedDeviceSerializer(WritableNestedSerializer):
  49. class Meta:
  50. model = models.Device
  51. fields = ['id', 'url', 'display_url', 'display', 'name']
  52. class NestedInterfaceSerializer(WritableNestedSerializer):
  53. device = NestedDeviceSerializer(read_only=True)
  54. _occupied = serializers.BooleanField(required=False, read_only=True)
  55. class Meta:
  56. model = models.Interface
  57. fields = ['id', 'url', 'display_url', 'display', 'device', 'name', 'cable', '_occupied']
  58. class NestedInterfaceTemplateSerializer(WritableNestedSerializer):
  59. class Meta:
  60. model = models.InterfaceTemplate
  61. fields = ['id', 'url', 'display', 'name']
  62. class NestedDeviceBaySerializer(WritableNestedSerializer):
  63. device = NestedDeviceSerializer(read_only=True)
  64. class Meta:
  65. model = models.DeviceBay
  66. fields = ['id', 'url', 'display_url', 'display', 'device', 'name']
  67. class ModuleBayNestedModuleSerializer(WritableNestedSerializer):
  68. class Meta:
  69. model = models.Module
  70. fields = ['id', 'url', 'display_url', 'display', 'serial']
  71. class NestedModuleBaySerializer(WritableNestedSerializer):
  72. class Meta:
  73. model = models.ModuleBay
  74. fields = ['id', 'url', 'display_url', 'display', 'name']
  75. class NestedPlatformSerializer(WritableNestedSerializer):
  76. class Meta:
  77. model = models.Platform
  78. fields = ['id', 'url', 'display_url', 'display', 'name']