获得子查询的计数

问题描述 投票:0回答:1

我想用子查询过滤器在我的查询集中注释一个计数字段:

我的代码:

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

返回多个对象。

django django-queryset django-annotate
1个回答
0
投票

此解决方案对我有用:

 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,
            )
© www.soinside.com 2019 - 2024. All rights reserved.