From eb4ef18d61db61f43e29224239f908767856f4ac Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Sat, 17 Aug 2024 21:08:39 -0500 Subject: [PATCH] For Cable API add PK for cable terminations to serializer --- netbox/dcim/api/serializers_/cables.py | 17 +++++++++++++++-- netbox/dcim/tests/test_api.py | 8 ++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/netbox/dcim/api/serializers_/cables.py b/netbox/dcim/api/serializers_/cables.py index 809a07d2c..c5d78d924 100644 --- a/netbox/dcim/api/serializers_/cables.py +++ b/netbox/dcim/api/serializers_/cables.py @@ -16,14 +16,27 @@ __all__ = ( 'CableSerializer', 'CableTerminationSerializer', 'CabledObjectSerializer', + 'GenericObjectTerminationSerializer', 'TracedCableSerializer', ) +class GenericObjectTerminationSerializer(GenericObjectSerializer): + id = serializers.IntegerField(required=False) + + def to_representation(self, instance): + data = super().to_representation(instance) + termination = instance.cable_terminations.first() + if termination: + data['id'] = termination.pk + + return data + + class CableSerializer(NetBoxModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:cable-detail') - a_terminations = GenericObjectSerializer(many=True, required=False) - b_terminations = GenericObjectSerializer(many=True, required=False) + a_terminations = GenericObjectTerminationSerializer(many=True, required=False) + b_terminations = GenericObjectTerminationSerializer(many=True, required=False) status = ChoiceField(choices=LinkStatusChoices, required=False) tenant = TenantSerializer(nested=True, required=False, allow_null=True) length_unit = ChoiceField(choices=CableLengthUnitChoices, allow_blank=True, required=False, allow_null=True) diff --git a/netbox/dcim/tests/test_api.py b/netbox/dcim/tests/test_api.py index 52b850b24..435581c7e 100644 --- a/netbox/dcim/tests/test_api.py +++ b/netbox/dcim/tests/test_api.py @@ -2038,6 +2038,14 @@ class CableTest(APIViewTestCases.APIViewTestCase): }, ] + def test_cable_termination_pk_exist(self): + self.add_permissions('dcim.view_cable') + cable = Cable.objects.first() + url = reverse('dcim-api:cable-detail', kwargs={'pk': cable.pk}) + response = self.client.get(url, {}, format='json', **self.header) + self.assertHttpStatus(response, status.HTTP_200_OK) + self.assertIsNotNone(response.data['a_terminations'][0]['id']) + class ConnectedDeviceTest(APITestCase):