Django: Получение количества определенных значений по месяцам в наборе запросов
Моя модель выглядит следующим образом:
class Project(models.Model):
name = models.CharField(max_length=1000, null=True, blank=True)
date_created = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=1000, null=True, blank=True)
Поле статуса имеет около 5 различных вариантов (выиграл, проиграл, открыт, ожидает, отменен).
Мне нужно знать, как получить количество проектов со статусом x в каждом месяце в заданном временном диапазоне запроса.
Я смог получить общую сумму проектов за каждый месяц со следующей аннотацией:
Project.objects.all().annotate(month=TruncMonth('date_created')).values(
'month').annotate(total=Count('pk'), ).order_by('date_created')
Однако, я ищу вывод, подобный следующему:
[{date: 'January 2020', total: 30, won: 10, lost:10, open: 10, pending: 0, cancelled: 0},
{date: 'February 2020', total: 30, won: 10, lost:10, open: 10, pending: 0, cancelled: 0},
{date: 'March 2020', total: 30, won: 10, lost:10, open: 10, pending: 0, cancelled: 0}]
В идеале я бы хотел, чтобы ключи в конечном выводе были динамическими (т.е. если добавляется новый статус, нам не нужно жестко кодировать новый ключ в запрос), но я не знаю, возможно ли это или нет.
Спасибо за ваше время!