获取子查询的计数

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,
)