Python Django:如何在模板中显示模型字段的总和
我构建了以下模型:Python Django:如何在模板中显示模型字段的总和,python,django,django-models,Python,Django,Django Models,我构建了以下模型: 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(defau
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_commission}}标记来显示我模板中所有承诺的总和。要实现这个目标,我的返回语句应该是什么样子的?我尝试了各种各样的方法,比如return self.sumcommission,但就是找不到正确的解决方案
非常感谢您的帮助 我认为您可以通过以下方式完成此操作: 使现代化 从注释中,我假设您使用的是ListView,那么您可以简单地向get_context_数据添加另一个变量,以添加承诺的总和。例如:
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()
并在视图中使用它,如下所示:
@classmethod
def sum_commitment(cls):
return cls.objects.all().aggregate(sum_all=Sum('commitment')).get('sum_all')
context['commitment_sum'] = Fund.sum_commitment()
这里的承诺是一个整数,所以我真的不明白你想要总结什么?你想计算数据库中所有基金记录的总和吗?承诺字段的所有模型条目,因此如果我的数据库中有两个基金,第一个基金的承诺=10,第二个基金的承诺=30,我想显示总和,在本例中,在我的模板中为40是的,正好是所有基金记录的承诺字段的总和,那么将其作为财产是没有意义的。这一点只适用于一个基金实例,而不是所有基金。我想知道,将总和承诺作为一种财产,而不仅仅是一种普通方法,是否有任何优势?据我所知,在模板中,它不会有任何区别。但正如我上面所说,我认为这根本不应该是模型上的一种方法。classmethod可能更有意义,但更适合这样做的地方是在Manager上。ruddra中的代码可以工作,但是我只能使用´{%for fund in object_list%}`循环访问模板中的值,因此当我在数据库中有多条记录时,我看到的值会成倍增加,我怎么能只使用一个简单的´´{{fund.sum_commission}}}标记,不带循环,仅在使用class方法的版本对我有效时才显示值,非常感谢@ruddra