Django注解(),计数()

thigvfpy  于 2023-01-14  发布在  Go
关注(0)|答案(2)|浏览(122)

我使用annotate()和Count()得到如下输出

<QuerySet [{'pid': 11, 'status': 'Completed', 'status__count': 3}, {'pid': 11, 'status': 'Hold', 'status__count': 12}, {'pid': 11, 'status': 'InProgress', 'status__count': 2}, {'pid': 11, 'status': 'New', 'status__count': 3}, }]

这是我写的代码
view.py:

tasks = Task.objects.values('pid','status').annotate(Count('status')).order_by('pid')

实际上,我希望输出如下所示

<QuerySet [{'pid': 11, 'Completed': 3, 'Hold': 12,  'InProgress': 2,'New': 3},}]

我该怎么做呢?

rta7y2nd

rta7y2nd1#

你可以这样尝试:

Task.objects.values('pid').annotate(
    completed = Count('status', filter=Q(status='Completed')),
    hold=Count('status', filter=Q(status="Hold")),
    in_progress=Count('status', filter=Q(status="InProgress"))
).order_by('pid')

更多信息请参见documentation

ca1c2owp

ca1c2owp2#

我发现的另一种方法也适用于

谢谢

相关问题