How to use normal Filter together with SearchFilter on Django Rest Framework? How to use normal Filter together with SearchFilter on Django Rest Framework? django django

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