【问题标题】:Django Aggregate Query Values for Multiple ObjectsDjango 聚合多个对象的查询值
【发布时间】:2018-02-23 22:17:45
【问题描述】:

在我的项目中,我有一个名为 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 美元”。

知道如何实现这一点吗?我正在考虑在我的模板中使用反向关系,但您不能以这种方式创建聚合。谢谢你的帮助。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      你可以试试:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-19
        • 1970-01-01
        • 2020-06-06
        • 2017-04-21
        • 2012-04-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-22
        相关资源
        最近更新 更多