0

我的 annotate(sum()) 函数有一个小问题。现在我想要它做的是在列表中显示给定计划中所有到期日的总数。对于第一个,它确实如此。下面的代码:

#get the invesments maturing this year
        for p in plans:
            cur_inv = Investment.objects.all().filter(plan = p).order_by('financial_institution').filter(maturity_date__year = current_year)
            nxt_inv = Investment.objects.all().filter(plan = p).order_by('financial_institution').filter(maturity_date__year = next_yr)
            thr_inv = Investment.objects.all().filter(plan = p).order_by('financial_institution').filter(maturity_date__year = thr_yr)
            fr_inv = Investment.objects.all().filter(plan = p).order_by('financial_institution').filter(maturity_date__year = fr_yr)
            fv_inv = Investment.objects.all().filter(plan = p).order_by('financial_institution').filter(maturity_date__year = fv_yr)

            for inv in cur_inv:
                total += inv.amount or 0
            for inv in cur_inv:
                total_m += inv.maturity_amount or 0

            for inv in nxt_inv:
                total2 += inv.amount or 0
            for inv in nxt_inv:
                total_m2 += inv.maturity_amount or 0

            for inv in thr_inv:
                total3 += inv.amount or 0
            for inv in thr_inv:
                total_m3 += inv.maturity_amount or 0

            for inv in fr_inv:
                total4 += inv.amount or 0
            for inv in fr_inv:
                total_m4 += inv.maturity_amount or 0

            for inv in fv_inv:
                total5 += inv.amount or 0
            for inv in fv_inv:
                total_m5 += inv.maturity_amount or 0

#Calculate the holding totals with each company
            total_list = p.investment_set.filter(maturity_date__gte= '%s-1-1' % current_year).values('financial_institution__abbr').annotate(Sum('maturity_amount')).order_by('financial_institution__abbr')
            gtotal = total_m + total_m2 + total_m3 + total_m4 + total_m5

            plan_list.append({
                'plan':p,
                'investment': cur_inv,
                'nxt_inv': nxt_inv,
                'thr_inv': thr_inv,
                'fr_inv': fr_inv,
                'fv_inv': fv_inv,
                'total_list': total_list,
                'grand': gtotal,
            })

我现在唯一的问题是,当它进入下一个计划时,它会继续添加到总计中,而不是回到 0。

我错过了什么吗?

任何帮助,将不胜感激。

谢谢

4

1 回答 1

1

您正在使用+=变量total_m*,但从不将它们重置为0循环。它们不会自动重置,只是因为新的迭代已经开始。

FWIW,您应该尝试在此处优化您的代码。您正在生成 6*len(plans) 查询,这可能相当昂贵。

于 2011-11-01T16:53:32.760 回答