我正在使用DRF(Django Rest Framework)。
我声明了一个ModelViewSet,现在我想在上面添加过滤器。
class GoodsViewSet(viewsets.ModelViewSet):
class Filter(FilterSet):
class Meta:
model = m.Goods
filter_class = Filter
filter_backends = (SearchFilter, Filter)
search_fields = ['name',]
queryset = m.Goods.objects.all()
serializer_class = s.GoodsSerializer
看到我声明了一个Filter子类,并将其应用于:
filter_class = Filter
在添加行之前,它在一开始就起作用了:
filter_backends = (SearchFilter, Filter)
search_fields = ['name',]
现在,而正常的搜索过滤器应用于filter_class
被跳过。
一个字,他们不能一起工作。
如何解决这个问题?
最后,我发现了我们应指定两个filter_backends
在一起:
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
或者我们可以忽略filter_backends
特定ViewSet
类上的字段,而将它们全局应用于settings.py
:
REST_FRAMEWORK = {
# ... other configurations
'DEFAULT_FILTER_BACKENDS': (
'rest_framework.filters.SearchFilter',
'django_filters.rest_framework.DjangoFilterBackend',
),
}
这样的filter_class
和search_fields
可供选择的视图集在同一时间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句