簡體   English   中英

Django:如何在模板中顯示“模型”字段的總和

[英]Django: How to show sum of Model field in template

我建立了以下模型:

class Fund(models.Model):
    name = models.CharField(max_length=30)
    gp = models.ForeignKey(GeneralPartner, on_delete = models.CASCADE)
    currency = models.CharField(max_length=3, default="")
    commitment = models.IntegerField(default=0)


    def __str__(self):
        return self.name

    @property
    def sum_commitment(self):
        return self.commitment

我想通過模板中的簡單{{ fund.sum_commitment }}標簽顯示模板中所有承諾的總和。 為了實現這個目標,我的return語句看起來像什么? 我嘗試了各種方法,例如return self.sum(commitment) ,但是根本找不到正確的解決方案。

非常感謝您的幫助!

我認為您可以使用Aggregate這樣做:

from django.db.models import Sum

@property
def sum_commitment(self):
    return self.__class__.objects.all().aggregate(sum_all=Sum('commitment')).get('sum_all')

更新

從注釋中,我假設您正在使用ListView,那么您可以簡單地將另一個變量添加到get_context_data以添加承諾的總和。 例如:

class SomeListView(ListView):
    ...


    def get_context_data(self, **kwargs):
        context = super(SomeListView, self).get_context_data(**kwargs)
        context['commitment_sum'] = Fund.objects.all().aggregate(sum_all=Sum('commitment')).get('sum_all')
        return context

然后通過{{ commitment_sum }}訪問模板中的值。

另外,有可能需要多次重用此代碼,然后可以使用class方法而不是如下的property方法:

@classmethod
def sum_commitment(cls):
    return cls.objects.all().aggregate(sum_all=Sum('commitment')).get('sum_all')

並在這樣的視圖中使用它:

context['commitment_sum'] = Fund.sum_commitment()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM