mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-25 08:46:10 -06:00
show ip address functions on device api view (rough first pass)
This commit is contained in:
parent
4920539c52
commit
432d37dd09
@ -13,9 +13,9 @@ from dcim.models import *
|
||||
from extras.api.nested_serializers import NestedConfigTemplateSerializer
|
||||
from ipam.api.nested_serializers import (
|
||||
NestedASNSerializer, NestedIPAddressSerializer, NestedL2VPNTerminationSerializer, NestedVLANSerializer,
|
||||
NestedVRFSerializer,
|
||||
NestedVRFSerializer, NestedIPAddressFunctionAssignmentsSerializer
|
||||
)
|
||||
from ipam.models import ASN, VLAN
|
||||
from ipam.models import ASN, VLAN, IPAddressFunctionAssignments
|
||||
from netbox.api.fields import ChoiceField, ContentTypeField, SerializedPKRelatedField
|
||||
from netbox.api.serializers import (
|
||||
GenericObjectSerializer, NestedGroupModelSerializer, NetBoxModelSerializer, ValidatedModelSerializer,
|
||||
@ -668,6 +668,7 @@ class DeviceSerializer(NetBoxModelSerializer):
|
||||
virtual_chassis = NestedVirtualChassisSerializer(required=False, allow_null=True, default=None)
|
||||
vc_position = serializers.IntegerField(allow_null=True, max_value=255, min_value=0, default=None)
|
||||
config_template = NestedConfigTemplateSerializer(required=False, allow_null=True, default=None)
|
||||
ipaddressfunctions = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Device
|
||||
@ -676,6 +677,7 @@ class DeviceSerializer(NetBoxModelSerializer):
|
||||
'site', 'location', 'rack', 'position', 'face', 'parent_device', 'status', 'airflow', 'primary_ip',
|
||||
'primary_ip4', 'primary_ip6', 'cluster', 'virtual_chassis', 'vc_position', 'vc_priority', 'description',
|
||||
'comments', 'config_template', 'local_context_data', 'tags', 'custom_fields', 'created', 'last_updated',
|
||||
'ipaddressfunctions',
|
||||
]
|
||||
|
||||
@extend_schema_field(NestedDeviceSerializer)
|
||||
@ -689,6 +691,14 @@ class DeviceSerializer(NetBoxModelSerializer):
|
||||
data['device_bay'] = NestedDeviceBaySerializer(instance=device_bay, context=context).data
|
||||
return data
|
||||
|
||||
@extend_schema_field(NestedDeviceSerializer)
|
||||
def get_ipaddressfunctions(self, obj):
|
||||
ct = ContentType.objects.get_for_model(obj)
|
||||
ipaddrfuncs = IPAddressFunctionAssignments.objects.filter(assigned_object_type=ct, assigned_object_id=obj.id)
|
||||
serializer = NestedIPAddressFunctionAssignmentsSerializer
|
||||
context = {'request': self.context['request']}
|
||||
return serializer(ipaddrfuncs, context=context, many=True).data
|
||||
|
||||
|
||||
class DeviceWithConfigContextSerializer(DeviceSerializer):
|
||||
config_context = serializers.SerializerMethodField(read_only=True)
|
||||
@ -699,6 +709,7 @@ class DeviceWithConfigContextSerializer(DeviceSerializer):
|
||||
'site', 'location', 'rack', 'position', 'face', 'parent_device', 'status', 'airflow', 'primary_ip',
|
||||
'primary_ip4', 'primary_ip6', 'cluster', 'virtual_chassis', 'vc_position', 'vc_priority', 'description',
|
||||
'comments', 'local_context_data', 'tags', 'custom_fields', 'config_context', 'created', 'last_updated',
|
||||
'ipaddressfunctions',
|
||||
]
|
||||
|
||||
@extend_schema_field(serializers.JSONField(allow_null=True))
|
||||
|
@ -13,6 +13,7 @@ __all__ = [
|
||||
'NestedFHRPGroupSerializer',
|
||||
'NestedFHRPGroupAssignmentSerializer',
|
||||
'NestedIPAddressSerializer',
|
||||
'NestedIPAddressFunctionAssignmentsSerializer',
|
||||
'NestedIPRangeSerializer',
|
||||
'NestedL2VPNSerializer',
|
||||
'NestedL2VPNTerminationSerializer',
|
||||
@ -205,6 +206,18 @@ class NestedIPAddressSerializer(WritableNestedSerializer):
|
||||
fields = ['id', 'url', 'display', 'family', 'address']
|
||||
|
||||
|
||||
class NestedIPAddressFunctionAssignmentsSerializer(WritableNestedSerializer):
|
||||
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddressfunctionassignments-detail')
|
||||
# assigned_object = serializers.SerializerMethodField(read_only=True)
|
||||
assigned_ip = NestedIPAddressSerializer()
|
||||
|
||||
class Meta:
|
||||
model = models.IPAddressFunctionAssignments
|
||||
fields = [
|
||||
'id', 'url', 'display', 'assigned_ip', 'function'
|
||||
]
|
||||
|
||||
|
||||
#
|
||||
# Services
|
||||
#
|
||||
|
Loading…
Reference in New Issue
Block a user