diff --git a/netbox/dcim/api/serializers_/device_components.py b/netbox/dcim/api/serializers_/device_components.py index b94c13270..f6f007d5f 100644 --- a/netbox/dcim/api/serializers_/device_components.py +++ b/netbox/dcim/api/serializers_/device_components.py @@ -32,6 +32,7 @@ __all__ = ( 'DeviceBaySerializer', 'FrontPortSerializer', 'InterfaceSerializer', + 'GetInterfaceSerializer', 'InventoryItemSerializer', 'ModuleBaySerializer', 'PowerOutletSerializer', @@ -169,7 +170,7 @@ class PowerOutletSerializer(NetBoxModelSerializer, CabledObjectSerializer, Conne class InterfaceSerializer(NetBoxModelSerializer, CabledObjectSerializer, ConnectedEndpointsSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:interface-detail') - device = DeviceSerializer(nested=False) + device = DeviceSerializer(nested=True) vdcs = SerializedPKRelatedField( queryset=VirtualDeviceContext.objects.all(), serializer=VirtualDeviceContextSerializer, @@ -249,6 +250,10 @@ class InterfaceSerializer(NetBoxModelSerializer, CabledObjectSerializer, Connect return super().validate(data) +class GetInterfaceSerializer(InterfaceSerializer): + device = DeviceSerializer(nested=False) + + class RearPortSerializer(NetBoxModelSerializer, CabledObjectSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearport-detail') device = DeviceSerializer(nested=True) diff --git a/netbox/dcim/api/views.py b/netbox/dcim/api/views.py index d6ddd466b..676a39ef2 100644 --- a/netbox/dcim/api/views.py +++ b/netbox/dcim/api/views.py @@ -440,6 +440,11 @@ class InterfaceViewSet(PathEndpointMixin, NetBoxModelViewSet): serializer_class = serializers.InterfaceSerializer filterset_class = filtersets.InterfaceFilterSet + def get_serializer_class(self): + if self.request.method == 'GET': + return serializers.GetInterfaceSerializer + return self.serializer_class + def get_bulk_destroy_queryset(self): # Ensure child interfaces are deleted prior to their parents return self.get_queryset().order_by('device', 'parent', CollateAsChar('_name'))