1
1
from copy import deepcopy
2
2
3
+ from django .contrib .contenttypes .prefetch import GenericPrefetch
3
4
from django .core .exceptions import ObjectDoesNotExist , PermissionDenied
4
5
from django .db import transaction
5
6
from django .shortcuts import get_object_or_404
13
14
from rest_framework .routers import APIRootView
14
15
from rest_framework .views import APIView
15
16
17
+ from dcim .models import Interface
16
18
from ipam import filtersets
17
19
from ipam .models import *
18
20
from ipam .utils import get_next_available_prefix
21
23
from netbox .config import get_config
22
24
from netbox .constants import ADVISORY_LOCK_KEYS
23
25
from utilities .api import get_serializer_for_model
26
+ from virtualization .models import VMInterface
24
27
from . import serializers
25
28
26
29
@@ -79,7 +82,7 @@ class RoleViewSet(NetBoxModelViewSet):
79
82
80
83
81
84
class PrefixViewSet (NetBoxModelViewSet ):
82
- queryset = Prefix .objects .all ( )
85
+ queryset = Prefix .objects .prefetch_related ( "scope" )
83
86
serializer_class = serializers .PrefixSerializer
84
87
filterset_class = filtersets .PrefixFilterSet
85
88
@@ -100,7 +103,17 @@ class IPRangeViewSet(NetBoxModelViewSet):
100
103
101
104
102
105
class 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
+ )
104
117
serializer_class = serializers .IPAddressSerializer
105
118
filterset_class = filtersets .IPAddressFilterSet
106
119
0 commit comments