django - 获取子查询的计数
问题描述
我想用子查询过滤器注释查询集中的计数字段:
我的代码:
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_classrooms]
).annotate(
attendees_count=Count(module_attempts),
)
这里 module_progress__module__id 是注解迭代的当前 VirtualClassRoomModule 的 id。计数基本上是 ModuleProgressAttempt 过滤查询集的长度。目前计数始终为 1 ,尽管
ModuleProgressAttempt.objects.filter(
module_progress__module__id=<Current-module-id>
)
返回多个对象。
解决方案
这个解决方案对我有用:
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_classrooms]
).annotate(
attendees_count=module_attempts_count,
)
推荐阅读
- c# - 如何在 Visual C# 中创建用于通信的自定义应用程序 uri 方案/协议?
- spring-boot - 春季启动 hsqldb 详细信息
- c# - 如何为特定查询请求启用 Apollo Tracing with Hot Chocolate?
- jquery - 将按钮的 data-attr 绑定到 div
- r - purrr:如何将一个列表与多个嵌套列表相交
- typescript - Cloud Function 从实时数据库中检索数据并创建新表
- powershell - 远程从 sqlcmd.exe 获取 SQL 值
- arrays - 将多个对象传递到数组时,VBScript 将多个对象设置为 Nothing 不起作用
- node.js - await 不等待函数结束
- ios - 导入 Firebase 以在物理设备上使用时出错