[Fixed]-How to use normal Filter together with SearchFilter on Django Rest Framework?

30👍

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:

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.

4👍

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',)

Leave a comment