From aad0acac85dab83cd91ab87acbcf343db16542a0 Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Zaroubin Date: Thu, 10 Apr 2025 21:57:18 +0000 Subject: [PATCH] Fix CircuitTermination relations --- netbox/circuits/views.py | 5 +++++ netbox/dcim/views.py | 19 ++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/netbox/circuits/views.py b/netbox/circuits/views.py index 766a54bb8..8e3880e8b 100644 --- a/netbox/circuits/views.py +++ b/netbox/circuits/views.py @@ -170,11 +170,16 @@ class ProviderNetworkView(GetRelatedModelsMixin, generic.ObjectView): 'related_models': self.get_related_models( request, instance, + omit=(CircuitTermination,), extra=( ( Circuit.objects.restrict(request.user, 'view').filter(terminations___provider_network=instance), 'provider_network_id', ), + ( + CircuitTermination.objects.restrict(request.user, 'view').filter(_provider_network=instance), + 'provider_network_id', + ), ), ), } diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index ca025f3e3..db9024e19 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -237,7 +237,7 @@ class RegionView(GetRelatedModelsMixin, generic.ObjectView): 'related_models': self.get_related_models( request, regions, - omit=(Cluster, Prefix, WirelessLAN), + omit=(Cluster, CircuitTermination, Prefix, WirelessLAN), extra=( (Location.objects.restrict(request.user, 'view').filter(site__region__in=regions), 'region_id'), (Rack.objects.restrict(request.user, 'view').filter(site__region__in=regions), 'region_id'), @@ -256,6 +256,10 @@ class RegionView(GetRelatedModelsMixin, generic.ObjectView): ), # Handle these relations manually to avoid erroneous filter name resolution + ( + CircuitTermination.objects.restrict(request.user, 'view').filter(_region__in=regions), + 'region_id' + ), (Cluster.objects.restrict(request.user, 'view').filter(_region__in=regions), 'region_id'), (Prefix.objects.restrict(request.user, 'view').filter(_region__in=regions), 'region_id'), (WirelessLAN.objects.restrict(request.user, 'view').filter(_region__in=regions), 'region_id'), @@ -343,7 +347,7 @@ class SiteGroupView(GetRelatedModelsMixin, generic.ObjectView): 'related_models': self.get_related_models( request, groups, - omit=(Cluster, Prefix, WirelessLAN), + omit=(Cluster, CircuitTermination, Prefix, WirelessLAN), extra=( (Location.objects.restrict(request.user, 'view').filter(site__group__in=groups), 'site_group_id'), (Rack.objects.restrict(request.user, 'view').filter(site__group__in=groups), 'site_group_id'), @@ -374,6 +378,10 @@ class SiteGroupView(GetRelatedModelsMixin, generic.ObjectView): ), # Handle these relations manually to avoid erroneous filter name resolution + ( + CircuitTermination.objects.restrict(request.user, 'view').filter(_site_group__in=groups), + 'site_group_id' + ), ( Cluster.objects.restrict(request.user, 'view').filter(_site_group__in=groups), 'site_group_id' @@ -481,6 +489,7 @@ class SiteView(GetRelatedModelsMixin, generic.ObjectView): (Cluster.objects.restrict(request.user, 'view').filter(_site=instance), 'site_id'), (Prefix.objects.restrict(request.user, 'view').filter(_site=instance), 'site_id'), (WirelessLAN.objects.restrict(request.user, 'view').filter(_site=instance), 'site_id'), + (CircuitTermination.objects.restrict(request.user, 'view').filter(_site=instance), 'site_id'), ), ), } @@ -565,7 +574,7 @@ class LocationView(GetRelatedModelsMixin, generic.ObjectView): 'related_models': self.get_related_models( request, locations, - omit=[CableTermination, Cluster, Prefix, WirelessLAN], + omit=[CableTermination, CircuitTermination, Cluster, Prefix, WirelessLAN], extra=( ( Circuit.objects.restrict(request.user, 'view').filter( @@ -575,6 +584,10 @@ class LocationView(GetRelatedModelsMixin, generic.ObjectView): ), # Handle these relations manually to avoid erroneous filter name resolution + ( + CircuitTermination.objects.restrict(request.user, 'view').filter(_location=instance), + 'location_id' + ), (Cluster.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'), (Prefix.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'), (WirelessLAN.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'),