|
|
@@ -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
|
|
|
|