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 netbox.registry import registry
from utilities.forms.fields import ColorField, QueryField, TagFilterField from utilities.forms.fields import ColorField, QueryField, TagFilterField
from utilities.forms.widgets import FilterModifierWidget 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 from utilities.forms.widgets.modifiers import MODIFIER_EMPTY_FALSE, MODIFIER_EMPTY_TRUE
__all__ = ( __all__ = (
@ -211,9 +210,6 @@ class FilterModifierMixin:
if isinstance(field, (forms.BooleanField, forms.NullBooleanField)): if isinstance(field, (forms.BooleanField, forms.NullBooleanField)):
return [] return []
if self._is_api_widget_field(field):
return []
for field_class in field.__class__.__mro__: for field_class in field.__class__.__mro__:
if field_class in FORM_FIELD_LOOKUPS: if field_class in FORM_FIELD_LOOKUPS:
return FORM_FIELD_LOOKUPS[field_class] return FORM_FIELD_LOOKUPS[field_class]
@ -234,15 +230,3 @@ class FilterModifierMixin:
verified_lookups.append((lookup_code, lookup_label)) verified_lookups.append((lookup_code, lookup_label))
return verified_lookups 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 The JavaScript initializeFromURL() will set the correct modifier dropdown
value based on URL parameters. 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 # Get context from the original widget
original_context = self.original_widget.get_context(name, value, attrs) original_context = self.original_widget.get_context(name, value, attrs)