I\'m using DRF(Django Rest Framework).
I declared a ModelViewSet, and now I want to add filters on that.
class GoodsViewSet(viewsets.ModelViewSet):
c
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',)
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.