Refactor register_filterset to be more generic and simple

This commit is contained in:
Jason Novinger
2025-11-20 13:06:08 -06:00
parent 101b9d8295
commit 4114fad412
23 changed files with 165 additions and 140 deletions
+13
View File
@@ -0,0 +1,13 @@
from netbox.registry import registry
def register_filterset(filterset_class):
"""
Decorator for registering a FilterSet with the application registry.
Uses model identifier as key to match search index pattern.
"""
model = filterset_class._meta.model
label = f'{model._meta.app_label}.{model._meta.model_name}'
registry['filtersets'][label] = filterset_class
return filterset_class
-15
View File
@@ -2,18 +2,3 @@ from .constants import *
from .forms import *
from .mixins import *
from .utils import *
def register_filterset(filterset_class):
"""
Decorator for registering a FilterSet with the application registry.
Uses model identifier as key to match search index pattern.
"""
def decorator(form_class):
from netbox.registry import registry
model = filterset_class._meta.model
key = f'{model._meta.app_label}.{model._meta.model_name}'
registry['filtersets'][key] = filterset_class
return form_class
return decorator
+3 -3
View File
@@ -5,7 +5,9 @@ from django import forms
from django.core.validators import MaxValueValidator, MinValueValidator
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
@@ -174,8 +176,6 @@ class FilterModifierMixin:
def _enhance_fields_with_modifiers(self):
"""Wrap compatible field widgets with FilterModifierWidget."""
from utilities.forms.widgets import FilterModifierWidget
from netbox.registry import registry
model = getattr(self, 'model', None)
if model is None and hasattr(self, '_meta'):
@@ -237,7 +237,7 @@ class FilterModifierMixin:
def _is_api_widget_field(self, field):
"""Check if a field uses an API-based widget."""
if field.widget is APISelect:
if isinstance(field.widget, APISelect):
return True
if hasattr(field.widget, 'attrs') and field.widget.attrs: