Сумма по условию и группировка по месяцам - 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 ко всем вашим объектам и оно будет усечено до месяца. и после этого выбирает это новое поле, а затем добавляет сумму ко всем объектам.