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

varsで使用+=していますが、ループ内でそれらをリセットすることはありません。新しい反復が開始されたという理由だけで、それらは自動的にリセットされません。total_m*0

FWIW、ここでコードを最適化してみてください。6 * len(plans)クエリを生成していますが、これはかなりコストがかかる可能性があります。

于 2011-11-01T16:53:32.760 に答える