mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-27 19:08:38 -06:00
Modify logic for table column filtering to further isolate the column filtering and the filterset tab
This commit is contained in:
parent
8a7df0b98d
commit
a422a3cd98
@ -161,10 +161,17 @@ class ObjectListView(BaseMultiObjectView, ActionsMixin, TableMixin):
|
||||
# Render the objects table
|
||||
table = self.get_table(self.queryset, request, has_bulk_actions)
|
||||
|
||||
# Check for filterset_form on this view, if a form exists, apply to context and table, otherwise set to None
|
||||
# Check for filterset_form on this view, if a form exists
|
||||
# * Apply to context for use by the filter form tab and initialize the form
|
||||
# * Apply to the table for use by the table and initialize a separate instance of the form for use by the table
|
||||
# column filters
|
||||
# * Otherwise set to None
|
||||
if self.filterset_form:
|
||||
filterset_form = self.filterset_form(request.GET)
|
||||
table.filterset_form = filterset_form
|
||||
table.filterset_form = self.filterset_form(request.GET)
|
||||
else:
|
||||
filterset_form = None
|
||||
table.filterset_form = None
|
||||
|
||||
# If this is an HTMX request, return only the rendered table HTML
|
||||
if request.htmx:
|
||||
|
@ -29,8 +29,13 @@ span.color-label {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
// Override column filter form dropdown
|
||||
// Override bootstrap "dropdown" positioning and display for column filters
|
||||
.column-filter {
|
||||
position: static;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
// Override mdi font-size to adjust filter icon size
|
||||
.btn.dropdown-toggle > .mdi-filter-settings {
|
||||
font-size: 1.25rem;
|
||||
}
|
@ -2,8 +2,7 @@
|
||||
{% if form_field %}
|
||||
<div class="column-filter dropdown">
|
||||
<a href="#" class="btn dropdown-toggle" data-bs-toggle="dropdown" data-bs-auto-close="outside">
|
||||
|
||||
<i class="mdi mdi-filter-settings" style="font-size: 1.25rem;"> </i>
|
||||
<i class="mdi mdi-filter-settings"></i>
|
||||
</a>
|
||||
<div class="dropdown-menu">
|
||||
{% render_table_filter_field form_field table=table request=request %}
|
||||
|
@ -5,35 +5,30 @@
|
||||
<thead>
|
||||
<tr>
|
||||
{% for column in table.columns %}
|
||||
{% if column.orderable %}
|
||||
<th {{ column.attrs.th.as_html }}>
|
||||
{% if column.is_ordered %}
|
||||
<div class="float-end">
|
||||
<a href="#"
|
||||
hx-get="{{ table.htmx_url }}{% querystring table.prefixed_order_by_field='' %}"
|
||||
hx-target="closest .htmx-container"
|
||||
{% if not table.embedded %}hx-push-url="true"{% endif %}
|
||||
class="text-danger"
|
||||
><i class="mdi mdi-close"></i></a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if table.filterset_form %}
|
||||
{% include 'inc/table_header_filter_dropdown.html' with form_field=table.filterset_form|get_filter_field:column.name %}
|
||||
{% endif %}
|
||||
<th {{ column.attrs.th.as_html }}>
|
||||
{% if column.is_ordered %}
|
||||
<div class="float-end">
|
||||
<a href="#"
|
||||
hx-get="{{ table.htmx_url }}{% querystring table.prefixed_order_by_field='' %}"
|
||||
hx-target="closest .htmx-container"
|
||||
{% if not table.embedded %}hx-push-url="true"{% endif %}
|
||||
class="text-danger"
|
||||
><i class="mdi mdi-close"></i></a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if table.filterset_form %}
|
||||
{% include 'inc/table_header_filter_dropdown.html' with form_field=table.filterset_form|get_filter_field:column.name %}
|
||||
{% endif %}
|
||||
{% if column.orderable %}
|
||||
<a href="#"
|
||||
hx-get="{{ table.htmx_url }}{% querystring table.prefixed_order_by_field=column.order_by_alias.next %}"
|
||||
hx-target="closest .htmx-container"
|
||||
{% if not table.embedded %}hx-push-url="true"{% endif %}
|
||||
hx-get="{{ table.htmx_url }}{% querystring table.prefixed_order_by_field=column.order_by_alias.next %}"
|
||||
hx-target="closest .htmx-container"
|
||||
{% if not table.embedded %}hx-push-url="true"{% endif %}
|
||||
>{{ column.header }}</a>
|
||||
</th>
|
||||
{% else %}
|
||||
<th {{ column.attrs.th.as_html }}>
|
||||
{% if table.filterset_form %}
|
||||
{% include 'inc/table_header_filter_dropdown.html' with form_field=table.filterset_form|get_filter_field:column.name %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{{ column.header }}
|
||||
</th>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</th>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</thead>
|
||||
|
@ -136,7 +136,7 @@ def render_field(field, bulk_nullable=False, label=None):
|
||||
|
||||
|
||||
@register.inclusion_tag('form_helpers/render_field.html')
|
||||
def render_table_filter_field(field, table=None, request=None):
|
||||
def render_table_filter_field(field, table, request):
|
||||
"""
|
||||
Render a single form field for table column filters from template
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user