Я получаю такой вывод, используя 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}, }]
это код, который я пишу, чтобы получить вот так
вид.py:
tasks = Task.objects.values('pid','status').annotate(Count('status')).order_by('pid')
На самом деле я хочу, чтобы мой вывод был таким
<QuerySet [{'pid': 11, 'Completed': 3, 'Hold': 12, 'InProgress': 2,'New': 3},}]
Как мне это сделать?
class Task(models.Model): name = models.CharField(max_length=1000,default = "",null=False) status = models.CharField(max_length=30,default = "",null=False) pid=models. Внешний ключ (проекты, on_delete = КАСКАД)
но как это возможно с тем же Project id, но другим status? Один проект может иметь один статус, верно?
может помочь аннотация с условием: stackoverflow.com/questions/30752268/…





Вы можете попробовать так:
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')
Более подробную информацию можно найти в документации.
Другой метод, который я нашел, также работал
спасибо вам
Не стоит ставить скриншоты кода. Пожалуйста, поместите фактический код в блок ``` ```.
можешь поделиться
models.py