Coverage for apis_core/generic/filtersets.py: 52%
23 statements
« prev ^ index » next coverage.py v7.5.3, created at 2025-06-25 10:00 +0000
« prev ^ index » next coverage.py v7.5.3, created at 2025-06-25 10:00 +0000
1import logging
3import django_filters
4from django.apps import apps
5from django_filters.filterset import FilterSet
7from apis_core.collections.filters import CollectionsIncludeExcludeFilter
9from .forms import GenericFilterSetForm
11logger = logging.getLogger(__name__)
14class GenericFilterSet(FilterSet):
15 """
16 Our GenericFilterSet sets the default `form` to be our
17 GenericFilterSetForm, which is set up to ignore the `columns` field
18 of the form.
19 """
21 class Meta:
22 form = GenericFilterSetForm
23 # we set the UnknownFieldBehavior to WARN, so the form does not
24 # break if there are JSONFields
25 unknown_field_behavior = django_filters.UnknownFieldBehavior.WARN
27 def __init__(self, *args, **kwargs):
28 super().__init__(*args, **kwargs)
29 model = self._meta.model
30 # remove all the filters that are based on auto_created model fields
31 for field in model._meta.get_fields():
32 if getattr(field, "auto_created", False) and field.name in self.filters:
33 del self.filters[field.name]
34 try:
35 skoscollection = apps.get_model("collections.SkosCollection")
36 if skoscollection.objects.exists():
37 self.filters["collections"] = CollectionsIncludeExcludeFilter(
38 queryset=skoscollection.objects.all(),
39 )
40 except LookupError as e:
41 logger.debug("Not adding collections filter to form: %s", e)