From 701f40e2a8e46ebcf8bf11707f1c418bbc06c9c8 Mon Sep 17 00:00:00 2001 From: Alexander Haase Date: Sun, 16 Feb 2025 20:04:12 +0100 Subject: [PATCH] Show parent contacts for nested models When contacts of a nested model are displayed, the contacts of the parents are also displayed. --- netbox/tenancy/views.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/netbox/tenancy/views.py b/netbox/tenancy/views.py index 0988d2e65..9bb542f82 100644 --- a/netbox/tenancy/views.py +++ b/netbox/tenancy/views.py @@ -2,6 +2,7 @@ from django.contrib.contenttypes.models import ContentType from django.shortcuts import get_object_or_404 from django.utils.translation import gettext_lazy as _ +from netbox.models import NestedGroupModel from netbox.views import generic from utilities.query import count_related from utilities.views import GetRelatedModelsMixin, ViewTab, register_model_view @@ -23,19 +24,18 @@ class ObjectContactsView(generic.ObjectChildrenView): ) def get_children(self, request, parent): - return ContactAssignment.objects.restrict(request.user, 'view').filter( - object_type=ContentType.objects.get_for_model(parent), - object_id=parent.pk - ).order_by('priority', 'contact', 'role') + qs = ContactAssignment.objects.restrict(request.user, 'view') + for obj in [parent]: + qs = qs.filter( + object_type=ContentType.objects.get_for_model(obj), + object_id__in=( + obj.get_ancestors(include_self=True).values_list('pk', flat=True) + if isinstance(obj, NestedGroupModel) + else [obj.pk] + ), + ) - def get_table(self, *args, **kwargs): - table = super().get_table(*args, **kwargs) - - # Hide object columns - table.columns.hide('object_type') - table.columns.hide('object') - - return table + return qs.order_by('priority', 'contact', 'role') #