Coverage for apis_core/utils/filters.py: 40%
20 statements
« prev ^ index » next coverage.py v7.6.1, created at 2024-09-16 07:42 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2024-09-16 07:42 +0000
1from django.db.models import Q
2from django.template import loader
3from rest_framework.filters import SearchFilter
5from apis_core.apis_entities.utils import get_entity_classes
6from apis_core.generic.helpers import generate_search_filter
9class CustomSearchFilter(SearchFilter):
10 def filter_queryset(self, request, queryset, view):
11 search_terms = self.get_search_terms(request)
12 if not search_terms:
13 return queryset
14 entities = get_entity_classes()
15 q = Q()
16 for entity in entities:
17 name = entity._meta.model_name
18 q |= Q(**{f"{name}__isnull": False}) & generate_search_filter(
19 entity, search_terms, prefix=f"{name}__"
20 )
21 return queryset.filter(q)
23 def to_html(self, request, queryset, view):
24 context = {
25 "param": self.search_param,
26 "term": request.query_params.get(self.search_param, ""),
27 }
28 template = loader.get_template(self.template)
29 return template.render(context)