获取子查询的计数
get count of a Subquery
我想用子查询过滤器注释查询集中的计数字段:
我的代码:
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>
)
returns不止一个对象。
这个解决方案对我有用:
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,
)
我想用子查询过滤器注释查询集中的计数字段:
我的代码:
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>
)
returns不止一个对象。
这个解决方案对我有用:
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,
)