Получение нарастающей суммы с группировкой по в django orm

У меня есть таблица из двух (соответствующих) столбцов. таблица: Транзакция столбцы: дата_транзакции, сумма

Я хотел бы получить кумулятивную сумму за каждый месяц. То есть, для каждого месяца получить сумму транзакций с начала до этого момента времени. В PostgreSQL я бы сделал примерно следующее:

SELECT date_trunc('month', transaction_date::date) AS formatted_transaction_date,
       SUM(SUM(amount)) OVER (ORDER BY date_trunc('month', transaction_date::date)
           ROWS UNBOUNDED PRECEDING) AS cumulative_transaction_amount
FROM transaction
GROUP BY date_trunc('month', transaction_date::date);

Я пытаюсь сделать то же самое в Django Orm. Ближе всего мне удалось добиться следующего:

Transaction.objects.values(
    formatted_transaction_date=TruncMonth('transaction_date')
).annotate(
    cumulative_transaction_amount=Window(
        expression=Sum('amount'),
        order_by=TruncMonth('transaction_date').asc(),
        frame=RowRange(start=None, end=0),
    ),
)

Однако это приводит к ошибке:

django.db.utils.ProgrammingError: колонка "transaction.amount" должна присутствовать в предложении GROUP BY или использоваться в агрегатной функции

.

Я понимаю, что запрос Django, который я выполняю, не идентичен запросу PostgreSQL. Запрос PostgreSQL выполняет SUM(SUM(amount)), а запрос Django переводится просто как SUM(amount).

Однако я не смог найти синтаксис Django для достижения того же результата. Что я делаю неправильно?

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