Browse Source

Miscellaneous API query optimizations

Jeremy Stretch 8 years ago
parent
commit
483ad256a8
2 changed files with 12 additions and 11 deletions
  1. 8 7
      netbox/dcim/api/views.py
  2. 4 4
      netbox/ipam/api/views.py

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

@@ -47,7 +47,7 @@ class RackGroupListView(generics.ListAPIView):
     """
     List all rack groups
     """
-    queryset = RackGroup.objects.all()
+    queryset = RackGroup.objects.select_related('site')
     serializer_class = serializers.RackGroupSerializer
     filter_class = filters.RackGroupFilter
 
@@ -56,7 +56,7 @@ class RackGroupDetailView(generics.RetrieveAPIView):
     """
     Retrieve a single rack group
     """
-    queryset = RackGroup.objects.all()
+    queryset = RackGroup.objects.select_related('site')
     serializer_class = serializers.RackGroupSerializer
 
 
@@ -68,7 +68,7 @@ class RackListView(generics.ListAPIView):
     """
     List racks (filterable)
     """
-    queryset = Rack.objects.select_related('site', 'tenant')
+    queryset = Rack.objects.select_related('site', 'group', 'tenant')
     serializer_class = serializers.RackSerializer
     filter_class = filters.RackFilter
 
@@ -77,7 +77,7 @@ class RackDetailView(generics.RetrieveAPIView):
     """
     Retrieve a single rack
     """
-    queryset = Rack.objects.select_related('site', 'tenant')
+    queryset = Rack.objects.select_related('site', 'group', 'tenant')
     serializer_class = serializers.RackDetailSerializer
 
 
@@ -194,8 +194,8 @@ class DeviceListView(generics.ListAPIView):
     List devices (filterable)
     """
     queryset = Device.objects.select_related('device_type__manufacturer', 'device_role', 'tenant', 'platform',
-                                             'rack__site').prefetch_related('primary_ip4__nat_outside',
-                                                                            'primary_ip6__nat_outside')
+                                             'rack__site', 'parent_bay').prefetch_related('primary_ip4__nat_outside',
+                                                                                          'primary_ip6__nat_outside')
     serializer_class = serializers.DeviceSerializer
     filter_class = filters.DeviceFilter
     renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES + [BINDZoneRenderer, FlatJSONRenderer]
@@ -205,7 +205,8 @@ class DeviceDetailView(generics.RetrieveAPIView):
     """
     Retrieve a single device
     """
-    queryset = Device.objects.all()
+    queryset = Device.objects.select_related('device_type__manufacturer', 'device_role', 'tenant', 'platform',
+                                             'rack__site', 'parent_bay')
     serializer_class = serializers.DeviceSerializer
 
 

+ 4 - 4
netbox/ipam/api/views.py

@@ -140,7 +140,7 @@ class VLANGroupListView(generics.ListAPIView):
     """
     List all VLAN groups
     """
-    queryset = VLANGroup.objects.all()
+    queryset = VLANGroup.objects.select_related('site')
     serializer_class = serializers.VLANGroupSerializer
     filter_class = filters.VLANGroupFilter
 
@@ -149,7 +149,7 @@ class VLANGroupDetailView(generics.RetrieveAPIView):
     """
     Retrieve a single VLAN group
     """
-    queryset = VLANGroup.objects.all()
+    queryset = VLANGroup.objects.select_related('site')
     serializer_class = serializers.VLANGroupSerializer
 
 
@@ -161,7 +161,7 @@ class VLANListView(generics.ListAPIView):
     """
     List VLANs (filterable)
     """
-    queryset = VLAN.objects.select_related('site', 'tenant', 'role')
+    queryset = VLAN.objects.select_related('site', 'group', 'tenant', 'role')
     serializer_class = serializers.VLANSerializer
     filter_class = filters.VLANFilter
 
@@ -170,5 +170,5 @@ class VLANDetailView(generics.RetrieveAPIView):
     """
     Retrieve a single VLAN
     """
-    queryset = VLAN.objects.select_related('site', 'tenant', 'role')
+    queryset = VLAN.objects.select_related('site', 'group', 'tenant', 'role')
     serializer_class = serializers.VLANSerializer