Explorar el Código

Optimized API views

Jeremy Stretch hace 7 años
padre
commit
427226de8c
Se han modificado 2 ficheros con 45 adiciones y 9 borrados
  1. 10 2
      netbox/dcim/api/serializers.py
  2. 35 7
      netbox/dcim/api/views.py

+ 10 - 2
netbox/dcim/api/serializers.py

@@ -785,10 +785,18 @@ class NestedRearPortSerializer(WritableNestedSerializer):
 # Front ports
 #
 
+class FrontPortRearPortSerializer(WritableNestedSerializer):
+    url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearport-detail')
+
+    class Meta:
+        model = RearPort
+        fields = ['id', 'url', 'name']
+
+
 class FrontPortSerializer(ValidatedModelSerializer):
     device = NestedDeviceSerializer()
     type = ChoiceField(choices=PORT_TYPE_CHOICES)
-    rear_port = NestedRearPortSerializer()
+    rear_port = FrontPortRearPortSerializer()
     cable = NestedCableSerializer(read_only=True)
     tags = TagListSerializerField(required=False)
 
@@ -821,7 +829,7 @@ class DeviceBaySerializer(TaggitSerializer, ValidatedModelSerializer):
 
 
 class NestedDeviceBaySerializer(WritableNestedSerializer):
-    url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicebay-detail')
+    url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearport-detail')
     device = NestedDeviceSerializer(read_only=True)
 
     class Meta:

+ 35 - 7
netbox/dcim/api/views.py

@@ -330,31 +330,51 @@ class DeviceViewSet(CustomFieldModelViewSet):
 #
 
 class ConsolePortViewSet(ModelViewSet):
-    queryset = ConsolePort.objects.select_related('device', 'connected_endpoint__device').prefetch_related('tags')
+    queryset = ConsolePort.objects.select_related(
+        'device', 'connected_endpoint__device', 'cable'
+    ).prefetch_related(
+        'tags'
+    )
     serializer_class = serializers.ConsolePortSerializer
     filter_class = filters.ConsolePortFilter
 
 
 class ConsoleServerPortViewSet(ModelViewSet):
-    queryset = ConsoleServerPort.objects.select_related('device', 'connected_endpoint__device').prefetch_related('tags')
+    queryset = ConsoleServerPort.objects.select_related(
+        'device', 'connected_endpoint__device', 'cable'
+    ).prefetch_related(
+        'tags'
+    )
     serializer_class = serializers.ConsoleServerPortSerializer
     filter_class = filters.ConsoleServerPortFilter
 
 
 class PowerPortViewSet(ModelViewSet):
-    queryset = PowerPort.objects.select_related('device', 'connected_endpoint__device').prefetch_related('tags')
+    queryset = PowerPort.objects.select_related(
+        'device', 'connected_endpoint__device', 'cable'
+    ).prefetch_related(
+        'tags'
+    )
     serializer_class = serializers.PowerPortSerializer
     filter_class = filters.PowerPortFilter
 
 
 class PowerOutletViewSet(ModelViewSet):
-    queryset = PowerOutlet.objects.select_related('device', 'connected_endpoint__device').prefetch_related('tags')
+    queryset = PowerOutlet.objects.select_related(
+        'device', 'connected_endpoint__device', 'cable'
+    ).prefetch_related(
+        'tags'
+    )
     serializer_class = serializers.PowerOutletSerializer
     filter_class = filters.PowerOutletFilter
 
 
 class InterfaceViewSet(ModelViewSet):
-    queryset = Interface.objects.select_related('device').prefetch_related('tags')
+    queryset = Interface.objects.select_related(
+        'device', 'connected_endpoint__device', 'cable'
+    ).prefetch_related(
+        'tags'
+    )
     serializer_class = serializers.InterfaceSerializer
     filter_class = filters.InterfaceFilter
 
@@ -370,13 +390,21 @@ class InterfaceViewSet(ModelViewSet):
 
 
 class FrontPortViewSet(ModelViewSet):
-    queryset = FrontPort.objects.select_related('device__device_type__manufacturer', 'rear_port')
+    queryset = FrontPort.objects.select_related(
+        'device__device_type__manufacturer', 'rear_port', 'cable'
+    ).prefetch_related(
+        'tags'
+    )
     serializer_class = serializers.FrontPortSerializer
     filter_class = filters.FrontPortFilter
 
 
 class RearPortViewSet(ModelViewSet):
-    queryset = RearPort.objects.select_related('device__device_type__manufacturer')
+    queryset = RearPort.objects.select_related(
+        'device__device_type__manufacturer', 'cable'
+    ).prefetch_related(
+        'tags'
+    )
     serializer_class = serializers.RearPortSerializer
     filter_class = filters.RearPortFilter