Correct issue with filter_form not passing through render_table from django_tables2

This commit is contained in:
Daniel Sheppard 2025-01-20 14:21:41 -06:00
parent 8d65973c82
commit 92c3bbc9db
6 changed files with 17 additions and 7 deletions

View File

@ -180,8 +180,10 @@ class ObjectListView(BaseMultiObjectView, ActionsMixin, TableMixin):
# * Otherwise set to None # * Otherwise set to None
if self.filterset_form: if self.filterset_form:
filterset_form = self.filterset_form(request.GET) filterset_form = self.filterset_form(request.GET)
table.filterset_form = self.filterset_form(request.GET)
else: else:
filterset_form = None filterset_form = None
table.filterset_form = None
# If this is an HTMX request, return only the rendered table HTML # If this is an HTMX request, return only the rendered table HTML
if htmx_partial(request): if htmx_partial(request):
@ -196,7 +198,6 @@ class ObjectListView(BaseMultiObjectView, ActionsMixin, TableMixin):
'model': model, 'model': model,
'actions': actions, 'actions': actions,
}) })
context = { context = {
'model': model, 'model': model,
'table': table, 'table': table,

View File

@ -68,7 +68,7 @@ Context:
<div class="tab-pane show active" id="object-list" role="tabpanel" aria-labelledby="object-list-tab"> <div class="tab-pane show active" id="object-list" role="tabpanel" aria-labelledby="object-list-tab">
{# Applied filters #} {# Applied filters #}
{% applied_filters model form_filter request.GET %} {% applied_filters model filter_form request.GET %}
{# Object table controls #} {# Object table controls #}
{% include 'inc/table_controls_htmx.html' with table_modal="ObjectTable_config" %} {% include 'inc/table_controls_htmx.html' with table_modal="ObjectTable_config" %}

View File

@ -4,7 +4,7 @@
{% load render_table from django_tables2 %} {% load render_table from django_tables2 %}
{# OOB Swaps to update various components #} {# OOB Swaps to update various components #}
{% applied_filters model form_filter request.GET %} {% applied_filters model filter_form request.GET %}
<div class="htmx-container table-responsive"> <div class="htmx-container table-responsive">
{% with preferences|get_key:"pagination.placement" as paginator_placement %} {% with preferences|get_key:"pagination.placement" as paginator_placement %}

View File

@ -21,7 +21,7 @@
><i class="mdi mdi-close"></i></a> ><i class="mdi mdi-close"></i></a>
</div> </div>
{% endif %} {% endif %}
{% render_table_filter_field form_field=filter_form|get_filter_field:column.name table=table request=request%} {% render_table_filter_field column.name table request%}
<a href="#" <a href="#"
hx-get="{{ table.htmx_url }}{% querystring table.prefixed_order_by_field=column.order_by_alias.next %}" hx-get="{{ table.htmx_url }}{% querystring table.prefixed_order_by_field=column.order_by_alias.next %}"
{% if not table.embedded %}hx-push-url="true"{% endif %} {% if not table.embedded %}hx-push-url="true"{% endif %}

View File

@ -1,5 +1,5 @@
{% load form_helpers %} {% load form_helpers %}
{% if form_field %} {% if field %}
<div class="column-filter dropdown"> <div class="column-filter dropdown">
<a href="#" class="dropdown-toggle" data-bs-toggle="dropdown" data-bs-auto-close="outside"><i class="mdi mdi-filter-settings"></i></a> <a href="#" class="dropdown-toggle" data-bs-toggle="dropdown" data-bs-auto-close="outside"><i class="mdi mdi-filter-settings"></i></a>
<div class="dropdown-menu"> <div class="dropdown-menu">

View File

@ -34,7 +34,6 @@ def getfield(form, fieldname):
@register.filter() @register.filter()
def get_filter_field(form, fieldname): def get_filter_field(form, fieldname):
return getfield(form, f'{fieldname}') or getfield(form, f'{fieldname}_id') return getfield(form, f'{fieldname}') or getfield(form, f'{fieldname}_id')
@ -127,11 +126,21 @@ def render_field(field, bulk_nullable=False, label=None):
@register.inclusion_tag('form_helpers/render_table_filter_field.html') @register.inclusion_tag('form_helpers/render_table_filter_field.html')
def render_table_filter_field(field, table, request): def render_table_filter_field(fieldname, table, request):
""" """
Render a single form field for table column filters from template Render a single form field for table column filters from template
""" """
url = "" url = ""
field = None
# Does this table have a filterset form?
if table.filterset_form is not None:
# Get the filterset field
field = get_filter_field(table.filterset_form, fieldname)
# Return if no filterset field
if field is None:
return {}
# Handle filter forms # Handle filter forms
if table: if table: