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):