Django кумулятивная сумма или текущая сумма

Я пытаюсь сделать партионную книгу, в которой детали будут отображаться по результату поиска по дате. У меня есть столбец с именем balance, который будет отображать кумулятивные данные по дате поиска. Я хочу, чтобы столбец cumbalance в моей таблице зависел от столбца balance.

               --------------------------------------
               amount  payment   balance     CumBalance
               --------------------------------------  
                 10       5         5          5
                 20       5         15        20
                 10       15        -5        15

Мой views.py

            def partyDetails(request,pk):
                      form = DateRangeForm()
                      if request.method == 'POST':
                          form = DateRangeForm(request.POST or None)
                            if form.is_valid():
                             cumulative_balance = PurchasePayment.objects.all()
                                                 .filter(vendor=pk,date__range= 
                                                 (form.cleaned_data['start_date'],
                                                  form.cleaned_data['end_date']))
                                                  .annotate(cumbalance =Sum('balance'))
                           else:
                             return redirect('party_ledger')
                       return render(request, 'purchase/party_details.html', 
                                               {'dateform':form, 
                                               'cumbal':cumulative_balance,'name':pk})

Я также пробовал .aggregate(Sum('balance'))

Начиная с можно использовать Window выражение [Django-doc]:

from django.db.models import F, Sum, Window

cumulative_balance = PurchasePayment.objects.filter(
    vendor=pk,
    date__range=(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
).order_by('pk').annotate(
    cumbalance=Window(Sum('balance'), order_by=F('id').asc())
)
Вернуться на верх