Add prep_table_data() method to ObjectChildrenView

This commit is contained in:
jeremystretch 2021-12-14 15:42:28 -05:00
parent 4ffa823ab8
commit c981b5cba0
2 changed files with 15 additions and 5 deletions

View File

@ -462,14 +462,14 @@ class PrefixPrefixesView(generic.ObjectChildrenView):
template_name = 'ipam/prefix/prefixes.html' template_name = 'ipam/prefix/prefixes.html'
def get_children(self, request, parent): 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_available = bool(request.GET.get('show_available', 'true') == 'true')
show_assigned = bool(request.GET.get('show_assigned', '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): def get_extra_context(self, request, instance):
return { return {

View File

@ -96,6 +96,16 @@ class ObjectChildrenView(ObjectView):
""" """
raise NotImplementedError(f'{self.__class__.__name__} must implement get_children()') 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): def get(self, request, *args, **kwargs):
""" """
GET handler for rendering child objects. GET handler for rendering child objects.
@ -111,7 +121,7 @@ class ObjectChildrenView(ObjectView):
perm_name = get_permission_for_model(self.child_model, action) perm_name = get_permission_for_model(self.child_model, action)
permissions[action] = request.user.has_perm(perm_name) 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 # Determine whether to display bulk action checkboxes
if 'pk' in table.base_columns and (permissions['change'] or permissions['delete']): if 'pk' in table.base_columns and (permissions['change'] or permissions['delete']):
table.columns.show('pk') table.columns.show('pk')