Reduce the number of SQL queries made in API calls

This is done by adding missing tables/colums to the prefetch querysets.
This commit is contained in:
Armin Fisslthaler 2017-09-25 13:47:55 +02:00
parent b252f52f8e
commit 797074ad9f
3 changed files with 26 additions and 4 deletions

View File

@ -83,7 +83,7 @@ class RackRoleViewSet(ModelViewSet):
#
class RackViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
queryset = Rack.objects.select_related('site', 'group__site', 'tenant')
queryset = Rack.objects.select_related('site', 'group__site', 'tenant', 'rackrole')
serializer_class = serializers.RackSerializer
write_serializer_class = serializers.WritableRackSerializer
filter_class = filters.RackFilter
@ -219,6 +219,7 @@ class DeviceViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
queryset = Device.objects.select_related(
'device_type__manufacturer', 'device_role', 'tenant', 'platform', 'site', 'rack', 'parent_bay',
).prefetch_related(
'primary_ip4', 'primary_ip6',
'primary_ip4__nat_outside', 'primary_ip6__nat_outside',
)
serializer_class = serializers.DeviceSerializer
@ -320,7 +321,16 @@ class PowerOutletViewSet(WritableSerializerMixin, ModelViewSet):
class InterfaceViewSet(WritableSerializerMixin, ModelViewSet):
queryset = Interface.objects.select_related('device')
queryset = Interface.objects.select_related(
'circuit_termination__circuit',
'circuit_termination__interface',
'connected_as_a__interface_b',
'connected_as_a__interface_b__device',
'connected_as_b__interface_a',
'connected_as_b__interface_a__device',
'device',
'lag',
)
serializer_class = serializers.InterfaceSerializer
write_serializer_class = serializers.WritableInterfaceSerializer
filter_class = filters.InterfaceFilter

View File

@ -92,6 +92,6 @@ class RecentActivityViewSet(ReadOnlyModelViewSet):
"""
List all UserActions to provide a log of recent activity.
"""
queryset = UserAction.objects.all()
queryset = UserAction.objects.select_related('user')
serializer_class = serializers.UserActionSerializer
filter_class = filters.UserActionFilter

View File

@ -134,7 +134,19 @@ class PrefixViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
#
class IPAddressViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
queryset = IPAddress.objects.select_related('vrf__tenant', 'tenant', 'interface__device', 'nat_inside')
queryset = IPAddress.objects.select_related(
'interface',
'interface__circuit_termination',
'interface__connected_as_a__interface_b',
'interface__connected_as_a__interface_b__device',
'interface__connected_as_b__interface_a',
'interface__connected_as_b__interface_a__device',
'interface__device',
'nat_inside',
'nat_outside',
'tenant',
'vrf__tenant',
)
serializer_class = serializers.IPAddressSerializer
write_serializer_class = serializers.WritableIPAddressSerializer
filter_class = filters.IPAddressFilter