创建自定义查询集时是否可以考虑 MyModelViewSet 的 filter_backends?
class MyModelViewSet(viewsets.ModelViewSet):
filter_backends = (CustomFilter, )
serializer_class = MySerializer
def get_queryset(self):
# It should not return all objects, but only results from `CustomFilter`
queryset = LedgerEntry.objects.all()
# some extra filtering
return queryset
我应该如何实现?
Django:1.10
Django Rest 框架:3.4.6
请您参考如下方法:
是的,你可以。只需扩展 ViewSet 的 filter_queryset 方法
class MyModelViewSet(viewsets.ModelViewSet):
filter_backends = (CustomFilter, )
serializer_class = MySerializer
def filter_queryset(self, queryset):
# super needs to be called to filter backends to be applied
queryset = super().filter_queryset(queryset)
# some extra filtering
return queryset
在 ViewSet 的 Action 方法中它实际上是这样做的
queryset = self.filter_queryset(self.get_queryset())
因此,发送到序列化器的查询集是由 get_queryset 创建然后用 filter_queryset 过滤的查询集
