From aed71d8bebe10df2e0ca95bf4ab72834e32b1fbf Mon Sep 17 00:00:00 2001 From: KK Date: Wed, 14 Aug 2024 19:09:48 +0200 Subject: [PATCH] refactor(filters): config ArrayField DRY Move filter_overrides for ArrayField to Meta class of common parent for model-based FilterSets to reduce redundancy. --- apis_ontology/filtersets.py | 48 ++++++++++++------------------------- 1 file changed, 15 insertions(+), 33 deletions(-) diff --git a/apis_ontology/filtersets.py b/apis_ontology/filtersets.py index 59ace45..6553921 100644 --- a/apis_ontology/filtersets.py +++ b/apis_ontology/filtersets.py @@ -107,6 +107,21 @@ class BaseEntityFilterSet(AbstractEntityFilterSet): """ Parent class for all entity model classes. """ + + class Meta(AbstractEntityFilterSet.Meta): + filter_overrides = { + **AbstractEntityFilterSet.Meta.filter_overrides, + ArrayField: { + "filter_class": django_filters.MultipleChoiceFilter, + # "extra" attribute not working for fields with choices, see: + # https://github.com/carltongibson/django-filter/issues/1475 + "extra": lambda f: { + "lookup_expr": "icontains", + "widget": forms.SelectMultiple, + }, + }, + } + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if "custom_search" in self.filters: @@ -182,17 +197,6 @@ class Meta(BaseEntityFilterSet.Meta): fields = { "new_fictionality": ["icontains"], } - filter_overrides = { - ArrayField: { - "filter_class": django_filters.MultipleChoiceFilter, - # "extra" attribute not working for fields with choices, see: - # https://github.com/carltongibson/django-filter/issues/1475 - "extra": lambda f: { - "lookup_expr": "icontains", - "widget": forms.SelectMultiple, - }, - }, - } class VersionCharacterFilterSet(CharacterFilterSet): @@ -261,17 +265,6 @@ class Meta(BaseEntityFilterSet.Meta): fields = { "temporal_order": ["icontains"], } - filter_overrides = { - ArrayField: { - "filter_class": django_filters.MultipleChoiceFilter, - # "extra" attribute not working for fields with choices, see: - # https://github.com/carltongibson/django-filter/issues/1475 - "extra": lambda f: { - "lookup_expr": "icontains", - "widget": forms.SelectMultiple, - }, - }, - } class VersionWorkFilterSet(WorkFilterSet): @@ -293,17 +286,6 @@ class Meta(BaseEntityFilterSet.Meta): fields = { "language": ["icontains"], } - filter_overrides = { - ArrayField: { - "filter_class": django_filters.MultipleChoiceFilter, - # "extra" attribute not working for fields with choices, see: - # https://github.com/carltongibson/django-filter/issues/1475 - "extra": lambda f: { - "lookup_expr": "icontains", - "widget": forms.SelectMultiple, - }, - }, - } class VersionExpressionFilterSet(ExpressionFilterSet):