DRF поиск без учета регистра
Реализую фильтрацию, сортировку и поиск при помощи djang-filters
. Ситуация в том, что поиск он проводит строго по регистру, то есть ?search=test
не подойтет к "Test". Как можно исправить это?
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.generics import ListAPIView
from rest_framework import filters
class PizzaAPIView(ListAPIView):
queryset = PizzaModel.objects.all()
filter_backends = [DjangoFilterBackend, filters.OrderingFilter, filters.SearchFilter]
filterset_fields = ['id', 'title', 'price', 'category', 'rating']
ordering_fields = ['id', 'title', 'price', 'category', 'rating']
search_fields = ['title']
serializer_class = PizzaSerializer
Добавил функцию get_queryset для проверки регистра в поиске. Следовательно от прошлого варианта поиска можно отказаться.
class PizzaAPIView(ListAPIView):
queryset = PizzaModel.objects.all()
filter_backends = [DjangoFilterBackend, filters.OrderingFilter]
filterset_fields = ['id', 'title', 'price', 'category', 'rating']
ordering_fields = ['id', 'title', 'price', 'category', 'rating']
serializer_class = PizzaSerializer
def get_queryset(self):
search_query = self.request.query_params.get('search')
queryset = PizzaModel.objects.all()
if search_query:
queryset = queryset.filter(title__iregex=search_query)
return queryset