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