Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:如何在模板中显示模型字段的总和_Python_Django_Django Models - Fatal编程技术网

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