python - Django:如何在模板中显示模型字段的总和
问题描述
我已经建立了以下模型:
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 self.sum(commitment)
,但根本找不到正确的解决方案。
非常感谢您的帮助!
解决方案
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 }}
。
此外,您可能需要多次重用此代码,然后您可以使用类方法,而不是像这样的属性方法:
@classmethod
def sum_commitment(cls):
return cls.objects.all().aggregate(sum_all=Sum('commitment')).get('sum_all')
并像这样在视图中使用它:
context['commitment_sum'] = Fund.sum_commitment()
推荐阅读
- java - Android活动片段侦听器无法在tablayout中单击中间选项卡
- c# - 从 XML 填充的 DataTable 不会出现在后续函数中
- postgresql - 提取字符串中特殊字符之间的子字符串
- javascript - 如何在占位符文本内书写?
- android - 语言环境已更改,但字符串资源未更新
- javascript - 将字符串与嵌套变量连接以提供正确的行为
- c# - 有没有办法得到一个包含未实例化预制件的数组
- python - 从 groovy 脚本调用 python 类的方法
- reactjs - React/Redux:如何只允许用户在完成上一页的基础上进入下一页?
- java - 每次使用后都应该关闭流吗?