Django聚合多个对象的查询值

时间:2017-09-14 20:06:44

标签: django django-models django-templates django-views django-aggregation

在我的项目中,我有一个名为Organization的模型,可以有多个Campaign。然后,每个广告系列都可以有多个donor。希望在这里澄清我的模型是什么样的:

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 个答案:

答案 0 :(得分:3)

您应该可以使用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)

答案 1 :(得分:0)

你可以尝试:

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