From ae3527df164868585941d7b3cde095b24d24862d Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Wed, 7 Apr 2021 16:04:32 -0400 Subject: [PATCH] Fixes #6081: Fix interface connections REST API endpoint --- docs/release-notes/version-2.10.md | 1 + netbox/dcim/api/serializers.py | 2 +- netbox/dcim/api/views.py | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/version-2.10.md b/docs/release-notes/version-2.10.md index 95f8bd8ab..f895e43f7 100644 --- a/docs/release-notes/version-2.10.md +++ b/docs/release-notes/version-2.10.md @@ -13,6 +13,7 @@ * [#5805](https://github.com/netbox-community/netbox/issues/5805) - Fix missing custom field filters for cables, rack reservations * [#6073](https://github.com/netbox-community/netbox/issues/6073) - Permit users to manage their own REST API tokens without needing explicit permission +* [#6081](https://github.com/netbox-community/netbox/issues/6081) - Fix interface connections REST API endpoint --- diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index dc730488c..73059cad3 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -779,7 +779,7 @@ class CablePathSerializer(serializers.ModelSerializer): class InterfaceConnectionSerializer(ValidatedModelSerializer): interface_a = serializers.SerializerMethodField() - interface_b = NestedInterfaceSerializer(source='connected_endpoint') + interface_b = NestedInterfaceSerializer(source='_path.destination') connected_endpoint_reachable = serializers.SerializerMethodField(read_only=True) class Meta: diff --git a/netbox/dcim/api/views.py b/netbox/dcim/api/views.py index ae39f6ad0..9a090eddc 100644 --- a/netbox/dcim/api/views.py +++ b/netbox/dcim/api/views.py @@ -2,6 +2,7 @@ import socket from collections import OrderedDict from django.conf import settings +from django.contrib.contenttypes.models import ContentType from django.db.models import F from django.http import HttpResponseForbidden, HttpResponse from django.shortcuts import get_object_or_404 @@ -580,6 +581,7 @@ class PowerConnectionViewSet(ListModelMixin, GenericViewSet): class InterfaceConnectionViewSet(ListModelMixin, GenericViewSet): queryset = Interface.objects.prefetch_related('device', '_path').filter( # Avoid duplicate connections by only selecting the lower PK in a connected pair + _path__destination_type=ContentType.objects.get_by_natural_key('dcim', 'interface'), _path__destination_id__isnull=False, pk__lt=F('_path__destination_id') )