2011-11-01 88 views
1

目前,我有一種觀點,顯示了在未來5年內每位客戶的成熟期。我想要做的是顯示每個金融機構的總額,如下所示:在列表上使用註釋

機構|金額|到期金額

TD | 1000 | 1250
Scotia | 1203 | 9383

這是我出未來5年價值持有至到期投資的代碼。

#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 

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

我使用一個列表來存儲我所有的計劃,所以我可以爲我的模板上的每個計劃運行for循環。

我有一個類似的視圖,它做我想做的事情,但只有一個計劃,我不知道如何讓它與多個計劃一起工作。

這是我的代碼,如果它只是一個選定的計劃。

#Calculate the holding totals with each company 
     total_list = plan.investment_set.filter(maturity_date__gte= '%s-1-1' % current_year).values('financial_institution__abbr').annotate(Sum('maturity_amount')).order_by('financial_institution__abbr') 
     context['list'] = total_list 

如果有人可以幫助,將不勝感激。

謝謝。

回答

0

它看起來像你可能能夠讓你的數據庫爲你計算這個。

在SQL這可能看起來像:

SELECT sum(investment.amount) 
FROM investment, maturity_date 
WHERE investment.id = maturity_date.investment_id and year=%s 
GROUP BY investment.amount 

看一看Django's documentation for aggregation,看看是否有您的問題一個合適的。

在一個側面說明,Django的查詢集API是generative,這樣你就可以簡化您的查詢的建築:

investments = Investment.objects.all().filter(plan = p).order_by('financial_institution') 
cur_inv = investments.filter(maturity_date__year = current_year) 
nxt_inv = investments.filter(maturity_date__year = next_yr) 
thr_inv = investments.filter(maturity_date__year = thr_yr) 
fr_inv = investments.filter(maturity_date__year = fr_yr) 
fv_inv = investments.filter(maturity_date__year = fv_yr) 

編輯:我沒有這個嘗試過自己,但聚集的文檔this part樣子一個好的開始。