1

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

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 美元”。

关于我如何做到这一点的任何想法?我正在考虑在我的模板中使用反向关系,但您不能以这种方式创建聚合。谢谢你的帮助。

4

2 回答 2

4

您应该能够使用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)
于 2017-09-14T20:31:16.940 回答
0

你可以试试:

from django.db.models import
a = Campaign.objects.get(pk=1)
a.annotate(total_donnation=Sum('donor__amount'))
于 2017-09-14T20:34:44.247 回答