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'))