获取子查询的计数
Posted
技术标签:
【中文标题】获取子查询的计数【英文标题】:get count of a Subquery 【发布时间】:2020-10-04 14:42:58 【问题描述】:我想用子查询过滤器在我的查询集中注释一个计数字段:
我的代码:
module_attempts = Subquery(
ModuleProgressAttempt.objects.filter(
module_progress__module__id=OuterRef("pk")
).only("pk")
)
real_instances = VirtualClassRoomModule.objects.filter(
id__in=[vc.id for vc in vc_clas-s-rooms]
).annotate(
attendees_count=Count(module_attempts),
)
这里的module_progress__module__id是注解迭代的当前VirtualClassRoomModule的id。计数基本上是 ModuleProgressAttempt 过滤查询集的长度。目前计数始终为 1 ,尽管
ModuleProgressAttempt.objects.filter(
module_progress__module__id=<Current-module-id>
)
返回多个对象。
【问题讨论】:
【参考方案1】:这个解决方案对我有用:
module_attempts_count = Subquery(
ModuleProgressAttempt.objects.filter(module_progress__module__id=OuterRef("id"))
.values("module_progress__module__id")
.annotate(cnt=Count("id"))
.values("cnt")
)
real_instances = VirtualClassRoomModule.objects.filter(
id__in=[vc.id for vc in vc_clas-s-rooms]
).annotate(
attendees_count=module_attempts_count,
)
【讨论】:
以上是关于获取子查询的计数的主要内容,如果未能解决你的问题,请参考以下文章