11from copy import deepcopy
22
3+ from django .contrib .contenttypes .prefetch import GenericPrefetch
34from django .core .exceptions import ObjectDoesNotExist , PermissionDenied
45from django .db import transaction
56from django .shortcuts import get_object_or_404
1314from rest_framework .routers import APIRootView
1415from rest_framework .views import APIView
1516
17+ from dcim .models import Interface
1618from ipam import filtersets
1719from ipam .models import *
1820from ipam .utils import get_next_available_prefix
2123from netbox .config import get_config
2224from netbox .constants import ADVISORY_LOCK_KEYS
2325from utilities .api import get_serializer_for_model
26+ from virtualization .models import VMInterface
2427from . import serializers
2528
2629
@@ -79,7 +82,7 @@ class RoleViewSet(NetBoxModelViewSet):
7982
8083
8184class PrefixViewSet (NetBoxModelViewSet ):
82- queryset = Prefix .objects .all ( )
85+ queryset = Prefix .objects .prefetch_related ( "scope" )
8386 serializer_class = serializers .PrefixSerializer
8487 filterset_class = filtersets .PrefixFilterSet
8588
@@ -100,7 +103,17 @@ class IPRangeViewSet(NetBoxModelViewSet):
100103
101104
102105class IPAddressViewSet (NetBoxModelViewSet ):
103- queryset = IPAddress .objects .all ()
106+ queryset = IPAddress .objects .prefetch_related (
107+ GenericPrefetch (
108+ "assigned_object" ,
109+ [
110+ # serializers are taken according to IPADDRESS_ASSIGNMENT_MODELS
111+ FHRPGroup .objects .all (),
112+ Interface .objects .select_related ("cable" , "device" ),
113+ VMInterface .objects .select_related ("virtual_machine" ),
114+ ],
115+ ),
116+ )
104117 serializer_class = serializers .IPAddressSerializer
105118 filterset_class = filtersets .IPAddressFilterSet
106119
0 commit comments