![](/img/trans.png)
[英]How to show incremented Django model field value in template correctly?
[英]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.