2011-11-01 56 views
0

我的註釋(sum())函數有一個小問題。現在我想要它做的是在列表中列出給定計劃中所有到期日的總數。它爲第一個做。下面的代碼:annotate()添加超過需要

#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

添加到總計,難道我失去了一些東西?

任何幫助,將不勝感激。

感謝

+1

您似乎編輯了太多的代碼來正確地幫助您。 'total_m *'變量來自哪裏? –

+0

@ChrisPratt我會更新它。 – TheLifeOfSteve

回答

1

您使用+=total_m*增值經銷商,但從未將其復位0在循環。他們不會自動重置,只是因爲新的迭代已經開始。

FWIW,你應該嘗試在這裏優化你的代碼。您正在生成6 * len(計劃)查詢,這可能相當昂貴。

+0

謝謝,這工作......我會考慮優化我的查詢。 – TheLifeOfSteve