Сумма по условию и группировка по месяцам - Django запрос

class Movimentacao(models.Model):
    entrada_saida = models.CharField(max_length=100)
    date = models.DateField()
    movimentacao = models.CharField(max_length=200)
    produto = models.CharField(max_length=300)
    instituicao = models.CharField(max_length=200)
    quantidade = models.IntegerField()
    preco_unitario = models.DecimalField(max_digits=19, decimal_places=2)
    valor_da_operacao = models.DecimalField(max_digits=19, decimal_places=2)

Моя цель - суммировать valor_da_operacao за каждый месяц в date. Кроме того, поле produto должно быть равно "dividendo" (условие). Как я могу справиться с этим всего одним запросом в Django?

Я ожидаю, что у меня будет dict, подобный этому: {"dict": [["2022-Jan", 1.530], ["2022-Feb", 422], ["2022-Mar", 1.822]]}

>

Спасибо!

Вам необходимо использовать функцию Trunc. Она сократит ваши даты до минимального значения по вашему выбору.(2022-08-07 10:40:45 TruncDay==> 2022-08-07 00:00:00)

from django.db.models import Sum, DateField
from django.db.models.functions import Trunc

movimentacao_per_month = Experiment.objects.annotate(new_date=Trunc(
'date', 'month', output_field=DateField())).values(
    'new_date').annotate(sum_of_valor_da_operacao=Sum('valor_da_operacao'))

этот код сначала добавит поле new_date ко всем вашим объектам и оно будет усечено до месяца. и после этого выбирает это новое поле, а затем добавляет сумму ко всем объектам.

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