Enables filter modifiers on APISelect based fields

This commit is contained in:
Jason Novinger 2025-11-24 12:20:53 -06:00
parent fba56d3704
commit 078231a46b
2 changed files with 4 additions and 16 deletions

View File

@ -8,7 +8,6 @@ from django.utils.translation import gettext_lazy as _
from netbox.registry import registry
from utilities.forms.fields import ColorField, QueryField, TagFilterField
from utilities.forms.widgets import FilterModifierWidget
from utilities.forms.widgets.apiselect import APISelect
from utilities.forms.widgets.modifiers import MODIFIER_EMPTY_FALSE, MODIFIER_EMPTY_TRUE
__all__ = (
@ -211,9 +210,6 @@ class FilterModifierMixin:
if isinstance(field, (forms.BooleanField, forms.NullBooleanField)):
return []
if self._is_api_widget_field(field):
return []
for field_class in field.__class__.__mro__:
if field_class in FORM_FIELD_LOOKUPS:
return FORM_FIELD_LOOKUPS[field_class]
@ -234,15 +230,3 @@ class FilterModifierMixin:
verified_lookups.append((lookup_code, lookup_label))
return verified_lookups
def _is_api_widget_field(self, field):
"""Check if a field uses an API-based widget."""
if isinstance(field.widget, APISelect):
return True
if hasattr(field.widget, 'attrs') and field.widget.attrs:
api_attrs = ['data-url', 'data-api-url', 'data-static-params']
if any(attr in field.widget.attrs for attr in api_attrs):
return True
return False

View File

@ -86,6 +86,10 @@ class FilterModifierWidget(forms.Widget):
The JavaScript initializeFromURL() will set the correct modifier dropdown
value based on URL parameters.
"""
# Propagate any attrs set on the wrapper (like data-url from get_bound_field)
# to the original widget before rendering
self.original_widget.attrs.update(self.attrs)
# Get context from the original widget
original_context = self.original_widget.get_context(name, value, attrs)