From 5945b277408856d692f6a0245d1caa9b367f776a Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 1 Apr 2025 08:34:02 -0400 Subject: [PATCH] Move ObjectContactsView to netbox.views.generic.feature_views --- netbox/netbox/models/features.py | 2 +- netbox/netbox/views/generic/feature_views.py | 28 ++++++++++++++++++++ netbox/tenancy/views.py | 25 +---------------- 3 files changed, 30 insertions(+), 25 deletions(-) diff --git a/netbox/netbox/models/features.py b/netbox/netbox/models/features.py index 85edb9b5f..cf8f1afe8 100644 --- a/netbox/netbox/models/features.py +++ b/netbox/netbox/models/features.py @@ -661,7 +661,7 @@ def register_models(*models): # Register applicable feature views for the model if issubclass(model, ContactsMixin): register_model_view(model, 'contacts', kwargs={'model': model})( - 'tenancy.views.ObjectContactsView' + 'netbox.views.generic.ObjectContactsView' ) if issubclass(model, JournalingMixin): register_model_view(model, 'journal', kwargs={'model': model})( diff --git a/netbox/netbox/views/generic/feature_views.py b/netbox/netbox/views/generic/feature_views.py index 1e17d5354..63bbc86a5 100644 --- a/netbox/netbox/views/generic/feature_views.py +++ b/netbox/netbox/views/generic/feature_views.py @@ -12,13 +12,19 @@ from core.tables import JobTable, ObjectChangeTable from extras.forms import JournalEntryForm from extras.models import JournalEntry from extras.tables import JournalEntryTable +from tenancy.models import ContactAssignment +from tenancy.tables import ContactAssignmentTable +from tenancy.filtersets import ContactAssignmentFilterSet +from tenancy.forms import ContactAssignmentFilterForm from utilities.permissions import get_permission_for_model from utilities.views import ConditionalLoginRequiredMixin, GetReturnURLMixin, ViewTab from .base import BaseMultiObjectView +from .object_views import ObjectChildrenView __all__ = ( 'BulkSyncDataView', 'ObjectChangeLogView', + 'ObjectContactsView', 'ObjectJobsView', 'ObjectJournalView', 'ObjectSyncDataView', @@ -244,3 +250,25 @@ class BulkSyncDataView(GetReturnURLMixin, BaseMultiObjectView): )) return redirect(self.get_return_url(request)) + + +class ObjectContactsView(ObjectChildrenView): + child_model = ContactAssignment + table = ContactAssignmentTable + filterset = ContactAssignmentFilterSet + filterset_form = ContactAssignmentFilterForm + template_name = 'tenancy/object_contacts.html' + tab = ViewTab( + label=_('Contacts'), + badge=lambda obj: obj.get_contacts().count(), + permission='tenancy.view_contactassignment', + weight=5000 + ) + + def dispatch(self, request, *args, **kwargs): + model = kwargs.pop('model') + self.queryset = model.objects.all() + return super().dispatch(request, *args, **kwargs) + + def get_children(self, request, parent): + return parent.get_contacts().restrict(request.user, 'view').order_by('priority', 'contact', 'role') diff --git a/netbox/tenancy/views.py b/netbox/tenancy/views.py index 8f7e149d9..dd584d745 100644 --- a/netbox/tenancy/views.py +++ b/netbox/tenancy/views.py @@ -1,36 +1,13 @@ 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.views import generic from utilities.query import count_related -from utilities.views import GetRelatedModelsMixin, ViewTab, register_model_view +from utilities.views import GetRelatedModelsMixin, register_model_view from . import filtersets, forms, tables from .models import * -class ObjectContactsView(generic.ObjectChildrenView): - child_model = ContactAssignment - table = tables.ContactAssignmentTable - filterset = filtersets.ContactAssignmentFilterSet - filterset_form = forms.ContactAssignmentFilterForm - template_name = 'tenancy/object_contacts.html' - tab = ViewTab( - label=_('Contacts'), - badge=lambda obj: obj.get_contacts().count(), - permission='tenancy.view_contactassignment', - weight=5000 - ) - - def dispatch(self, request, *args, **kwargs): - model = kwargs.pop('model') - self.queryset = model.objects.all() - return super().dispatch(request, *args, **kwargs) - - def get_children(self, request, parent): - return parent.get_contacts().restrict(request.user, 'view').order_by('priority', 'contact', 'role') - - # # Tenant groups #