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}]

В идеале я бы хотел, чтобы ключи в конечном выводе были динамическими (т.е. если добавляется новый статус, нам не нужно жестко кодировать новый ключ в запрос), но я не знаю, возможно ли это или нет.

Спасибо за ваше время!

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