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

1import logging 

2 

3import django_filters 

4from django.apps import apps 

5from django_filters.filterset import FilterSet 

6 

7from apis_core.collections.filters import CollectionsIncludeExcludeFilter 

8 

9from .forms import GenericFilterSetForm 

10 

11logger = logging.getLogger(__name__) 

12 

13 

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 """ 

20 

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 

26 

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)