mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-13 16:47:34 -06:00
* Fixes N+1 problem on /interfaces, /ip-addresses and /prefixes requests * remove extra .all() * more prefetch for IPAddressViewSet
This commit is contained in:
parent
94618a9dfb
commit
145ee11a3f
@ -461,6 +461,7 @@ class InterfaceViewSet(PathEndpointMixin, NetBoxModelViewSet):
|
||||
Interface.objects.select_related("device", "cable"),
|
||||
],
|
||||
),
|
||||
'virtual_circuit_termination',
|
||||
'l2vpn_terminations', # Referenced by InterfaceSerializer.l2vpn_termination
|
||||
'ip_addresses', # Referenced by Interface.count_ipaddresses()
|
||||
'fhrp_group_assignments', # Referenced by Interface.count_fhrp_groups()
|
||||
|
@ -1,5 +1,6 @@
|
||||
from copy import deepcopy
|
||||
|
||||
from django.contrib.contenttypes.prefetch import GenericPrefetch
|
||||
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
|
||||
from django.db import transaction
|
||||
from django.shortcuts import get_object_or_404
|
||||
@ -13,6 +14,7 @@ from rest_framework.response import Response
|
||||
from rest_framework.routers import APIRootView
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from dcim.models import Interface
|
||||
from ipam import filtersets
|
||||
from ipam.models import *
|
||||
from ipam.utils import get_next_available_prefix
|
||||
@ -21,6 +23,7 @@ from netbox.api.viewsets.mixins import ObjectValidationMixin
|
||||
from netbox.config import get_config
|
||||
from netbox.constants import ADVISORY_LOCK_KEYS
|
||||
from utilities.api import get_serializer_for_model
|
||||
from virtualization.models import VMInterface
|
||||
from . import serializers
|
||||
|
||||
|
||||
@ -79,7 +82,7 @@ class RoleViewSet(NetBoxModelViewSet):
|
||||
|
||||
|
||||
class PrefixViewSet(NetBoxModelViewSet):
|
||||
queryset = Prefix.objects.all()
|
||||
queryset = Prefix.objects.prefetch_related("scope")
|
||||
serializer_class = serializers.PrefixSerializer
|
||||
filterset_class = filtersets.PrefixFilterSet
|
||||
|
||||
@ -100,7 +103,17 @@ class IPRangeViewSet(NetBoxModelViewSet):
|
||||
|
||||
|
||||
class IPAddressViewSet(NetBoxModelViewSet):
|
||||
queryset = IPAddress.objects.all()
|
||||
queryset = IPAddress.objects.prefetch_related(
|
||||
GenericPrefetch(
|
||||
"assigned_object",
|
||||
[
|
||||
# serializers are taken according to IPADDRESS_ASSIGNMENT_MODELS
|
||||
FHRPGroup.objects.all(),
|
||||
Interface.objects.select_related("cable", "device"),
|
||||
VMInterface.objects.select_related("virtual_machine"),
|
||||
],
|
||||
),
|
||||
)
|
||||
serializer_class = serializers.IPAddressSerializer
|
||||
filterset_class = filtersets.IPAddressFilterSet
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user