Django累积总和或运行总和

Sha*_*dul 2 python django postgresql

我正在尝试制作一份党派账簿。哪些详细信息将按日期搜索结果显示。我有一个列名称平衡,它将按日期搜索显示累积数据。我想查看表中的cumbalance列取决于余额列。

               --------------------------------------
               amount  payment   balance     CumBalance
               --------------------------------------  
                 10       5         5          5
                 20       5         15        20
                 10       15        -5        15
Run Code Online (Sandbox Code Playgroud)

我的看法:

               --------------------------------------
               amount  payment   balance     CumBalance
               --------------------------------------  
                 10       5         5          5
                 20       5         15        20
                 10       15        -5        15
Run Code Online (Sandbox Code Playgroud)

我也尝试过.aggregate(Sum('balance'))

我的模型:

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})
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 5

开始,您可以使用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())
)
Run Code Online (Sandbox Code Playgroud)