如何在Django Rest Framework自定义get方法中获取过滤后的查询集
解决方法
普通APIView不会自动执行过滤逻辑(只有继承GenericAPIView的视图才会自动处理),你需要手动调用每个过滤后端的filter_queryset方法,逐步对初始查询集进行过滤。
修改你的get方法如下:
def get(self, request): # 获取初始查询集,若需动态生成queryset可替换为self.get_queryset() queryset = self.queryset # 依次应用所有配置的过滤后端 for backend_class in self.filter_backends: backend = backend_class() queryset = backend.filter_queryset(request, queryset, self) # 传入过滤后的queryset到StatManager s = StatManager(queryset) return Response(s.dashboard())
说明
- 遍历你配置的
filter_backends列表,逐个实例化过滤后端 - 每个后端的
filter_queryset方法会接收request、当前queryset和视图实例self,返回过滤后的新queryset - 最终得到的
queryset就是经过所有过滤器处理后的结果,再传入StatManager即可
内容的提问来源于stack exchange,提问作者Oğuzhan Akan
相关产品推荐
相关产品推荐

