我想把两个不同物体的两个数相加。
这是一个简化的版本,我有两个整数,我把它们相乘得到multiplied
。
models.py:
class ModelA(models.Model):
number_a = models.IntegerField(default=1, null=True, blank=True)
number_b = models.IntegerField(default=1, null=True, blank=True)
def multiplied(self):
return self.number_a * self.number_b
views.py:
@login_required
def homeview(request):
numbers = ModelA.objects.all()
context = {
'numbers': numbers,
}
return TemplateResponse...
我尝试做的基本上是模板中的multiplied + multiplied
,但我只是不知道如何做,因为我首先必须循环通过对象。
如果我有ModelA
和two 'multiplied' values of 100
的两个示例,我想在模板中显示200
,这可能吗?
3条答案
按热度按时间dfuffjeb1#
好的做法是始终避免模板上的逻辑。最好在视图中循环并将计算值添加到上下文中:
xuo3flqw2#
您可以尝试使用
aggregate
执行此操作如果不适合,您只需在每个
field
上使用aggregate
,然后将它们加在一起。t1qtbnec3#
在模板中,当您对
numbers
变量执行forloop时,可以直接访问属性、函数和特性。因此,要访问您想要的值,我猜它看起来像这样,经过简化:
希望这有意义?
但是,请注意,这不是最有效的方法。
我们可以让Django让SQL服务器来完成计算方面的繁重工作,所以如果你想更聪明地优化你的视图,你可以注解掉你的
multiplied
函数,然后替换它,你仍然可以像我上面描述的那样在模板中访问它,但是我们需要稍微改变你视图中的代码,如下所示:正如haduki的回答中所描述的那样,通过使用
SUM
SQL数据库函数来创建一个SQL查询,从而将计算负载卸载到SQL服务器上,从各种Angular 来看,这几乎总是比在对象上使用函数要快得多。