mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-16 12:12:53 -06:00
Fixes #1645: Simplified interface serialzier for IP addresses and optimized API view queryset
This commit is contained in:
parent
04ba57cb38
commit
b5a51aced3
@ -3,9 +3,11 @@ from __future__ import unicode_literals
|
|||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
from rest_framework.reverse import reverse
|
||||||
from rest_framework.validators import UniqueTogetherValidator
|
from rest_framework.validators import UniqueTogetherValidator
|
||||||
|
|
||||||
from dcim.api.serializers import NestedDeviceSerializer, InterfaceSerializer, NestedSiteSerializer
|
from dcim.api.serializers import NestedDeviceSerializer, InterfaceSerializer, NestedSiteSerializer
|
||||||
|
from dcim.models import Interface
|
||||||
from extras.api.customfields import CustomFieldModelSerializer
|
from extras.api.customfields import CustomFieldModelSerializer
|
||||||
from ipam.constants import (
|
from ipam.constants import (
|
||||||
IPADDRESS_ROLE_CHOICES, IPADDRESS_STATUS_CHOICES, IP_PROTOCOL_CHOICES, PREFIX_STATUS_CHOICES, VLAN_STATUS_CHOICES,
|
IPADDRESS_ROLE_CHOICES, IPADDRESS_STATUS_CHOICES, IP_PROTOCOL_CHOICES, PREFIX_STATUS_CHOICES, VLAN_STATUS_CHOICES,
|
||||||
@ -255,15 +257,25 @@ class AvailablePrefixSerializer(serializers.Serializer):
|
|||||||
# IP addresses
|
# IP addresses
|
||||||
#
|
#
|
||||||
|
|
||||||
class IPAddressInterfaceSerializer(InterfaceSerializer):
|
class IPAddressInterfaceSerializer(serializers.ModelSerializer):
|
||||||
|
url = serializers.SerializerMethodField() # We're imitating a HyperlinkedIdentityField here
|
||||||
|
device = NestedDeviceSerializer()
|
||||||
virtual_machine = NestedVirtualMachineSerializer()
|
virtual_machine = NestedVirtualMachineSerializer()
|
||||||
|
|
||||||
class Meta(InterfaceSerializer.Meta):
|
class Meta(InterfaceSerializer.Meta):
|
||||||
|
model = Interface
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'device', 'virtual_machine', 'name', 'form_factor', 'enabled', 'lag', 'mtu', 'mac_address',
|
'id', 'url', 'device', 'virtual_machine', 'name',
|
||||||
'mgmt_only', 'description', 'is_connected', 'interface_connection', 'circuit_termination',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def get_url(self, obj):
|
||||||
|
"""
|
||||||
|
Return a link to the Interface via either the DCIM API if the parent is a Device, or via the virtualization API
|
||||||
|
if the parent is a VirtualMachine.
|
||||||
|
"""
|
||||||
|
url_name = 'dcim-api:interface-detail' if obj.device else 'virtualization-api:interface-detail'
|
||||||
|
return reverse(url_name, kwargs={'pk': obj.pk}, request=self.context['request'])
|
||||||
|
|
||||||
|
|
||||||
class IPAddressSerializer(CustomFieldModelSerializer):
|
class IPAddressSerializer(CustomFieldModelSerializer):
|
||||||
vrf = NestedVRFSerializer()
|
vrf = NestedVRFSerializer()
|
||||||
|
@ -219,9 +219,9 @@ class PrefixViewSet(CustomFieldModelViewSet):
|
|||||||
|
|
||||||
class IPAddressViewSet(CustomFieldModelViewSet):
|
class IPAddressViewSet(CustomFieldModelViewSet):
|
||||||
queryset = IPAddress.objects.select_related(
|
queryset = IPAddress.objects.select_related(
|
||||||
'vrf__tenant', 'tenant', 'nat_inside'
|
'vrf__tenant', 'tenant', 'nat_inside', 'interface__device__device_type', 'interface__virtual_machine'
|
||||||
).prefetch_related(
|
).prefetch_related(
|
||||||
'interface__device', 'interface__virtual_machine'
|
'nat_outside'
|
||||||
)
|
)
|
||||||
serializer_class = serializers.IPAddressSerializer
|
serializer_class = serializers.IPAddressSerializer
|
||||||
write_serializer_class = serializers.WritableIPAddressSerializer
|
write_serializer_class = serializers.WritableIPAddressSerializer
|
||||||
|
Loading…
Reference in New Issue
Block a user