Django:Aggregate Sum仅在刷新后才能在视图上工作

时间:2016-09-10 08:34:32

标签: django sum http-post refresh aggregate-functions

我在Django中有一个具有多个Line模型的Invoice模型。(具有标题,单价和数量的行项目)

我有一个'地址'视图,可以将项目行添加到发票中。 该视图还会显示所有当前发票行以及所有行项目的总价格的计算总和。

当我提交新订单项时,视图会刷新到同一页面,并且订单项会正确显示,但订单项的总计(总服务或总商品数)不会更新。 当我手动刷新页面时,或者当我添加另一行 - 与前一行总数相同时,它会更新。

这是我的相关观点

def addline(request, id):
    form = AddLineForm(request.POST or None )

    invoice = get_object_or_404(Invoice, id = id)
    linelist = Line.objects.filter(invoice = id).order_by('created_at')
    servicelines = linelist.filter(line_type  = "S")
    goodslines = linelist.filter(line_type = "G")
    totalservice = servicelines.aggregate(Sum('line_total'))['line_total__sum']
    print servicelines.aggregate(Sum('line_total'))
    totalgoods = goodslines.aggregate(Sum('line_total'))['line_total__sum']



    if form.is_valid():
        instance = form.save(commit=False) #do schtuff with data
        instance.invoice = invoice
        instance.line_total = instance.unit_price *instance.qty
        #print instance.line_total
        if form.cleaned_data.get('overwrite'): 
            invoice.invoiced_service = totalservice or 0 #or zero to prevent fuss if list is empty
            invoice.invoiced_goods = totalgoods or 0
            invoice.save()
        form.save()
        form = AddLineForm()

    context = {'inv': invoice, 'form': form, 'lines':linelist, 'goods': goodslines, 'services': servicelines ,'totalservice' : totalservice, 'totalgoods':totalgoods }
    return render(request,'testpaper.html', context)

先谢谢,我不确定会出现什么问题。也许Sum是懒惰而不是评估?

*已编辑以反映实际视图

1 个答案:

答案 0 :(得分:0)

发现问题:如果以form.save()结尾的form.is_valid'块需要在计算行的块之前,否则在保存当前项之前计算行数。