How to use normal Filter together with SearchFilter on Django Rest Framework?
Finally, I found we should specify two filter_backends
together:
from rest_framework.filters import SearchFilterfrom django_filters.rest_framework import DjangoFilterBackendclass GoodsViewSet(viewsets.ModelViewSet): class Filter(FilterSet): class Meta: model = m.Goods filter_class = Filter filter_backends = (SearchFilter, DjangoFilterBackend) search_fields = ['name',] queryset = m.Goods.objects.all() serializer_class = s.GoodsSerializer
Or we can ignore the filter_backends
field on a specific ViewSet
class, but apply them globally in settings.py
:
REST_FRAMEWORK = { # ... other configurations 'DEFAULT_FILTER_BACKENDS': ( 'rest_framework.filters.SearchFilter', 'django_filters.rest_framework.DjangoFilterBackend', ),}
So that the filter_class
and search_fields
options are available on the ViewSet at the same time.
this worked for me:
from django_filters import rest_framework as filters from django_filters.rest_framework import DjangoFilterBackend from rest_framework.filters import SearchFilter, OrderingFilter
--------views.py-----------------------------
filter_backends = (filters.DjangoFilterBackend, SearchFilter ,OrderingFilter) filter_fields =('completed',) ordering =('-date_created',) search_fields =('task_name',)