Это модель:
class Purchase(models.Model):
date = models.DateField(default=datetime.date.today,blank=False, null=True)
total_purchase = models.DecimalField(max_digits=10,decimal_places=2,blank=True, null=True)
Я хочу выполнить месячный расчет "total_purchase" в пределах определенного диапазона дат таким образом, чтобы, если в месяце нет покупок, общая сумма покупки равнялась стоимости покупки предыдущего месяца
И если через два месяца будет покупка, то к сумме этих двух добавится сумма ...
Пример:
Предположим, диапазон дат, указанный пользователем, - с апреля по ноябрь.
При покупке 2800 долларов в апреле и 5000 долларов в августе и 6000 долларов в октябре.
Тогда результат будет таким:
April 2800
May 2800
June 2800
July 2800
August 7800 #(2800 + 5000)
September 7800
October 13800 #(7800 + 6000)
November 13800
Есть идеи, как это сделать в запросах django?
Спасибо
Согласно ответу г-на Райдела Миранды. Я сделал следующее
import calendar
import collections
import dateutil
start_date = datetime.date(2018, 4, 1)
end_date = datetime.date(2019, 3, 31)
results = collections.OrderedDict()
result = Purchase.objects.filter(date__gte=start_date, date__lt=end_date).annotate(real_total = Case(When(Total_Purchase__isnull=True, then=0),default=F('tal_Purchase')))
date_cursor = start_date
while date_cursor < end_date:
month_partial_total = result.filter(date__month=date_cursor.month).agggate(partial_total=Sum('real_total'))['partial_total']
results[date_cursor.month] = month_partial_total
if month_partial_total == None:
month_partial_total = int(0)
else:
month_partial_total = month_partial_total
date_cursor += dateutil.relativedelta.relativedelta(months=1)
return results
Но теперь вывод идет так (из примера выше):
April 2800
May 0
June 0
July 0
August 5000
September 0
October 6000
November 0
У кого-нибудь есть идеи, как добавить между месяцами ...
Я хочу сделать что-то вроде
e = month_partial_total + month_partial_total.next
Я хочу добавить значение следующей итерации каждого month_partial_total. Я думаю, что это решит мою проблему ..
Кто-нибудь знает, как это сделать в Django?
Спасибо