Django annotate(),Count()

я получаю такой вывод, используя 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},}] **

>

Как я могу сделать?

Вы можете попробовать следующим образом:

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

Больше информации можно найти в документации.

Другой метод, который я нашел, тоже работает enter image description here

Спасибо вам

Вернуться на верх