Django聚合多个对象的查询值

Django聚合多个对象的查询值,django,django-models,django-templates,django-views,django-aggregation,Django,Django Models,Django Templates,Django Views,Django Aggregation,在我的项目中,我有一个名为组织的模型,它可以有多个活动。然后,每个活动可以有多个捐赠者。希望在此澄清我的模型是什么样子的: class Campaign(models.Model): name = models.CharField() organization = models.ForeignKey('org.Organization') class Donor(models.Model): lead = models.ForeignKey('org.Lead')

在我的项目中,我有一个名为
组织
的模型,它可以有多个
活动
。然后,每个活动可以有多个
捐赠者
。希望在此澄清我的模型是什么样子的:

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)
我想做的是显示一个活动,然后显示捐赠者的所有金额的总和(
provider.amount
)。例如,如果“活动1”有三个捐赠者,每个捐赠者捐赠了5美元,在我的模板中会显示:“活动1:$15。”


你知道我怎样才能做到这一点吗?我曾考虑在模板中使用反向关系,但您不能以这种方式创建聚合。谢谢你的帮助

您应该能够使用
注释
获取此信息。尝试以下方法:

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)

您应该能够使用
注释
获取此信息。尝试以下方法:

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)
您可以尝试:

from django.db.models import
a = Campaign.objects.get(pk=1)
a.annotate(total_donnation=Sum('donor__amount'))
您可以尝试:

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