From 84151cbc1a4c24b603878c099a293763247052fe Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Tue, 13 Feb 2024 15:23:14 -0600 Subject: [PATCH] Fix tom-select errors related to field id. Break out render_field function for column filters --- .../inc/table_header_filter_dropdown.html | 2 +- netbox/utilities/templatetags/form_helpers.py | 35 +++++++++++++------ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/netbox/templates/inc/table_header_filter_dropdown.html b/netbox/templates/inc/table_header_filter_dropdown.html index a0db03015..020ba6d4d 100644 --- a/netbox/templates/inc/table_header_filter_dropdown.html +++ b/netbox/templates/inc/table_header_filter_dropdown.html @@ -5,7 +5,7 @@ {% endif %} \ No newline at end of file diff --git a/netbox/utilities/templatetags/form_helpers.py b/netbox/utilities/templatetags/form_helpers.py index 6448f7d46..79bc2634c 100644 --- a/netbox/utilities/templatetags/form_helpers.py +++ b/netbox/utilities/templatetags/form_helpers.py @@ -58,10 +58,23 @@ def widget_type(field): # @register.inclusion_tag('form_helpers/render_field.html') -def render_field(field, bulk_nullable=False, label=None, table=None, request=None): +def render_field(field, bulk_nullable=False, label=None): """ Render a single form field from template """ + + return { + 'field': field, + 'label': label or field.label, + 'bulk_nullable': bulk_nullable, + } + + +@register.inclusion_tag('form_helpers/render_field.html') +def render_table_filter_field(field, table=None, request=None): + """ + Render a single form field for table column filters from template + """ url = "" # Handle filter forms @@ -74,18 +87,20 @@ def render_field(field, bulk_nullable=False, label=None, table=None, request=Non elif request: url = querystring(request, **kwargs) # Set HTMX args - if hasattr(field.field, 'widget'): - field.field.widget.attrs.update({ - 'hx-get': url if url else '#', - 'hx-push-url': "true", - 'hx-target': '#object_list', - 'hx-trigger': 'hidden.bs.dropdown from:closest .dropdown' - }) + + if hasattr(field.field, 'widget'): + field.field.widget.attrs.update({ + 'id': f'table_filter_id_{field.name}', + 'hx-get': url if url else '#', + 'hx-push-url': "true", + 'hx-target': '#object_list', + 'hx-trigger': 'hidden.bs.dropdown from:closest .dropdown' + }) return { 'field': field, - 'label': label or field.label if not table else None, - 'bulk_nullable': bulk_nullable, + 'label': None, + 'bulk_nullable': False, }