Source code for apis_core.utils.filters

from django.db.models import Q
from django.template import loader
from rest_framework.filters import SearchFilter

from apis_core.apis_entities.utils import get_entity_classes
from apis_core.generic.helpers import generate_search_filter


[docs] class CustomSearchFilter(SearchFilter):
[docs] def filter_queryset(self, request, queryset, view): search_terms = self.get_search_terms(request) if not search_terms: return queryset entities = get_entity_classes() q = Q() for entity in entities: name = entity._meta.model_name q |= Q(**{f"{name}__isnull": False}) & generate_search_filter( entity, search_terms, prefix=f"{name}__" ) return queryset.filter(q)
[docs] def to_html(self, request, queryset, view): context = { "param": self.search_param, "term": request.query_params.get(self.search_param, ""), } template = loader.get_template(self.template) return template.render(context)