0

在我的項目中,我有一個名爲Organization的模型,它可以有多個Campaign's。每個活動可以有多個donor's。希望在這裏澄清什麼是我的模型是這樣的:Django多個對象的聚合查詢值

class Campaign(models.Model): 
    name = models.CharField() 
    organization = models.ForeignKey('org.Organization') 


class Donor(models.Model): 
    lead = models.ForeignKey('org.Lead') 
    amount = models.DecimalField() 
    campaign = models.ForeignKey(Campaign) 

我想這樣做是顯示一個活動,然後顯示由捐助者(donor.amount)的所有金額的總和。例如,如果「Campaign1」有三個捐贈者,每個捐贈者捐贈5美元,則在我的模板中將顯示:「Campaign1:15美元」。

有關我如何完成此任何想法?我正在考慮在我的模板中使用後向關係,但不能以這種方式創建聚合。謝謝你的幫助。

回答

2

您應該可以使用annotate來獲取此信息。嘗試是這樣的:

from django.db.models import Sum  
campaigns = Campaign.objects.annotate(total_donations=Sum('donor__amount')) 

然後,您可以訪問的總捐款爲各廣告系列:

for campaign in campaigns: 
    print "%s: $%s" % (campaign.name, campaign.total_donations) 
0

你可以試試:

from django.db.models import 
a = Campaign.objects.get(pk=1) 
a.annotate(total_donnation=Sum('donor__amount'))