Finally, I found that we should specify two filter_backends together:
from rest_framework.filters import SearchFilter from django_filters.rest_framework import DjangoFilterBackend class 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 in 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 the filter_class and search_fields options are available simultaneously on the ViewSet.
source share