python - 重用 Django Rest Framework Generic 视图来获取它的 QuerySet
问题描述
我有一个 Django Rest Framework 的通用视图,其中包含很多设置(排序、过滤、搜索等):
class MyViewClass(generics.ListAPIView):
def get_queryset(self):
return ... # IMPORTANT: this uses self.request
def get_serializer_class(self):
return ... # IMPORTANT: this uses self.request
permission_classes = [permissions.IsAuthenticated]
pagination_class = StandardResultsSetPagination
filter_backends = [CustomOrdering, filters.SearchFilter]
search_fields = ['field1', 'field2']
ordering_fields = ['field1', 'field2', 'field3', 'field4']
现在我想从 QuerySet 下载文件,该文件必须使用相同的过滤器、排序和搜索参数进行计算。有没有办法重用由该视图计算的 QuerySet?我不需要分页(但是我认为我可以从前端解决这个问题,所以我不担心)。
我试过get_queryset
用一个丑陋的技巧调用方法,但它没有应用搜索和排序:
@login_required()
def download_result_with_filters(request):
class MockRequest:
request: HttpRequest
mock_request = MockRequest()
mock_request.request = request
queryset = MyView.get_queryset(mock_request)
...
任何形式的帮助将非常感激
解决方案
我可以打电话给MyViewClass
内部download_result_with_filters
:
@login_required()
def download_result_with_filters(request):
comb_dict: List[OrderedDict] = MyViewClass.as_view()(request=request).data['results']
您可以在data
其中获取 Django REST Framework 视图的所有响应,例如分页字段。在上面的示例中,我只需要生成的 QuerySet 的元素,它包含在results
分页响应的字段中
推荐阅读
- html - 渐变不覆盖全文
- jquery - 如何附加输入值
- html - 下拉确实有效,但不是我想要的方式?
- java - JasperReports Studio-Sorting HashMap 和错误“无法解析收集器”
- python - ReactJS + Flask 在本地工作,但不在 Heroku
- ubuntu - Visual Studio Code 和 WSL Ubuntu (Windows)
- docker - 为什么 Kubernetes 服务无法在 Minikube 上正常运行?(拒绝连接)
- php - 在 laravel 迁移中保存加密价格值
- javascript - 像下面这样在 Javascript 中将方法传递给基类的目的是什么?
- firebase - 如何从 firebase 服务器获取 firebase 功能 - 我在本地没有