#21150 fix filterset UI performance

This commit is contained in:
Arthur
2026-01-15 13:27:34 -08:00
parent 1c46215cd5
commit ef45059502

View File

@@ -188,13 +188,11 @@ class FilterModifierMixin:
key = f'{model._meta.app_label}.{model._meta.model_name}' key = f'{model._meta.app_label}.{model._meta.model_name}'
filterset_class = registry['filtersets'].get(key) filterset_class = registry['filtersets'].get(key)
filterset = filterset_class() if filterset_class else None
for field_name, field in self.fields.items(): for field_name, field in self.fields.items():
lookups = self._get_lookup_choices(field) lookups = self._get_lookup_choices(field)
if filterset: if filterset_class:
lookups = self._verify_lookups_with_filterset(field_name, lookups, filterset) lookups = self._verify_lookups_with_filterset(field_name, lookups, filterset_class)
if len(lookups) > 1: if len(lookups) > 1:
field.widget = FilterModifierWidget( field.widget = FilterModifierWidget(
@@ -213,8 +211,14 @@ class FilterModifierMixin:
return [] return []
def _verify_lookups_with_filterset(self, field_name, lookups, filterset): def _verify_lookups_with_filterset(self, field_name, lookups, filterset_class):
"""Verify which lookups are actually supported by the FilterSet.""" """Verify which lookups are actually supported by the FilterSet.
Args:
field_name: The name of the form field
lookups: List of (lookup_code, lookup_label) tuples to verify
filterset_class: The FilterSet class (not instance) to check against
"""
verified_lookups = [] verified_lookups = []
for lookup_code, lookup_label in lookups: for lookup_code, lookup_label in lookups:
@@ -223,7 +227,7 @@ class FilterModifierMixin:
else: else:
filter_key = f'{field_name}__{lookup_code}' if lookup_code != 'exact' else field_name filter_key = f'{field_name}__{lookup_code}' if lookup_code != 'exact' else field_name
if filter_key in filterset.filters: if filter_key in filterset_class.base_filters:
verified_lookups.append((lookup_code, lookup_label)) verified_lookups.append((lookup_code, lookup_label))
return verified_lookups return verified_lookups