django - Django Rest 框架:带注释查询集的分页
问题描述
我目前正在做一个需要分页的项目。向用户提供图像列表以及它们是否被用户收藏。
收藏的图像保存在单独的表格中。
为了提供图像列表和用户收藏的图像列表。
def _get_queryset(self, request):
user_favorited = DjImagingImagefavorites.objects.filter(ifv_img_recordid__exact=OuterRef('pk'), ifv_user_id__exact=request.user.profile)
queryset = DjImagingImage.objects.all().annotate(favorited=Exists(user_favorited))
return queryset
然后在列表函数中
def list(self, request):
images = self._get_queryset(request)
page = self.paginate_queryset(images) #Breaks here
查询然后引发错误。]不能在用于 GROUP BY 子句的 group by 列表的表达式中使用聚合或子查询。
由于 paginate 函数如何执行计数和构造非法 sql 语句的奇怪之处。
问题是- 他们是这样做的更好方法还是应该像我认为的那样完美地工作?
解决方案
我发现有效的解决方案编码如下
def list(self, request):
images = self._get_queryset(request)
#page = self.paginate_queryset(images)
return self.paginate(images)
我创建了一个名为 paginate 的包装器
def paginate(self, queryset):
"""Calculate paginated QuerySet and wrap in a Response.
Args:
queryset - the queryset to be paginated
"""
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
对于那些想知道我正在构建的查询集的人
def get_queryset(self):
"""Return the modified/prepared master QuerySet.
Returns:
QuerySet<DjImagingImage>: The modified master QuerySet
"""
return DjImagingImage.objects.annotate(
mine=FilteredRelation('djimaginguserspecifics',condition=Q(djimaginguserspecifics__usp_emp_employeeid=self.request.user.profile)),
usp_favorite=F('mine__usp_favorite'),
usp_inhistory=F('mine__usp_inhistory'),
usp_emp_employeeid=F('mine__usp_emp_employeeid'),
usp_lastviewed=F('mine__usp_lastviewed'),
comment_count=Count('djimagingimagecomment'))
推荐阅读
- reactjs - 如何从嵌套函数中获取具有 prop 类型的 React 组件?
- c# - 使用 Prism 和 MVVM 方式从另一个 Picker 中选择项目后,如何将焦点设置在 Picker 上?
- sql - 如何在 DolphinDB 中合并两列不同的时间数据类型?
- c# - 如何在 deps.json 文件中永久设置程序集的自定义运行时路径?
- excel - 使用vba登录
- excel - 是否有条件因素来检查带有字母的文件名然后执行代码?
- python - 如何将多列转置为多行但使用 Pandas 保留主键
- reactjs - reactjs中所有页面的元标记
- angular - 无法使用 localStorage 或 sessionStorage 从内部订阅同步到外部订阅
- autohotkey - LButton启动时如何停止AHK循环