[Fixed]-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 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 on a specific ViewSet class, but apply them globally in settings.py:

    # ... other configurations

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


    filter_backends = (filters.DjangoFilterBackend, SearchFilter ,OrderingFilter)
    filter_fields =('completed',)
    ordering =('-date_created',)
    search_fields =('task_name',)

Leave a comment