diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 7e6e1725f..04bcdb480 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -462,14 +462,14 @@ class PrefixPrefixesView(generic.ObjectChildrenView): template_name = 'ipam/prefix/prefixes.html' def get_children(self, request, parent): - child_prefixes = parent.get_child_prefixes().restrict(request.user, 'view') + return parent.get_child_prefixes().restrict(request.user, 'view') - # Add available prefixes if requested + def prep_table_data(self, request, queryset, parent): + # Determine whether to show assigned prefixes, available prefixes, or both show_available = bool(request.GET.get('show_available', 'true') == 'true') show_assigned = bool(request.GET.get('show_assigned', 'true') == 'true') - child_prefixes = add_requested_prefixes(parent.prefix, child_prefixes, show_available, show_assigned) - return child_prefixes + return add_requested_prefixes(parent.prefix, queryset, show_available, show_assigned) def get_extra_context(self, request, instance): return { diff --git a/netbox/netbox/views/generic.py b/netbox/netbox/views/generic.py index 84928dfff..2c63ee978 100644 --- a/netbox/netbox/views/generic.py +++ b/netbox/netbox/views/generic.py @@ -96,6 +96,16 @@ class ObjectChildrenView(ObjectView): """ raise NotImplementedError(f'{self.__class__.__name__} must implement get_children()') + def prep_table_data(self, request, queryset, parent): + """ + Provides a hook for subclassed views to modify data before initializing the table. + + :param request: The current request + :param queryset: The filtered queryset of child objects + :param parent: The parent object + """ + return queryset + def get(self, request, *args, **kwargs): """ GET handler for rendering child objects. @@ -111,7 +121,7 @@ class ObjectChildrenView(ObjectView): perm_name = get_permission_for_model(self.child_model, action) permissions[action] = request.user.has_perm(perm_name) - table = self.table(child_objects, user=request.user) + table = self.table(self.prep_table_data(request, child_objects, instance), user=request.user) # Determine whether to display bulk action checkboxes if 'pk' in table.base_columns and (permissions['change'] or permissions['delete']): table.columns.show('pk')