现在我想知道是否有一种方法可以在Django-Template中显示变量的总和。我的意思是,如果我有相同类型的变量,是否有一个模板侧函数来添加它们?
我知道,“逻辑”通常应该在模板之外,所以我写了一个函数来执行我想在模板中看到的计算:
def mission_duration(self):
duration = self.end - self.begin
return duration.days
然后在模板中使用它,效果很好。
但是,如果我在模板中有几个这样的变量,有没有一种简单的方法来总结它们的值并显示结果?现在,变量通过查询数据库来显示,通过for循环。结果可能会显示在模板中的循环之外...
或者在另一边:我怎么能把这个放在模型/view.py上来解决模板之外的问题呢?任务是在一个oneToMany关系表中到“雇员”...并且通常显示雇员的数据。所以对于模型/视图解决方案,我目前还不知道,如何循环到雇员的所有任务条目以在渲染模板之前建立所需的总和...
- 编辑04/20/2023:
在第一个答案的基础上(它对我的应用程序结构做了一些非常好的假设),我改变了几件事,现在有以下代码:
views.py:
...
context = {
...
'missions':Foreign_Missions.objects.filter(employee_id=request.POST['id']).order_by('-begin'),
'total_duration_days':Foreign_Missions.objects.total_duration_days(employee)
}
return render(request, 'show.html', context)
inmodels.pyin class“Foreign_Missions”:...
objects = Duration_Manager()
...
在managers.py
class Duration_Manager(models.Manager):
def with_duration_days(self):
return self.annotate(
duration_days= ExpressionWrapper(
(F('end') - F('begin')), output_field=fields.DurationField()
)
)
def total_duration_days(self, employee):
return self.with_duration_days().filter(employee=employee).aggregate(
total_duration=Sum('duration_days')
)['total_duration']
现在它的作品…仍然要编辑输出格式的持续时间字段在“天只”,但计算工作正确了
1条答案
按热度按时间wlzqhblo1#
我可能会通过为你的模型设置一个自定义管理器来解决这个问题,我对你的模型做了一些假设:
在您看来,您可以执行以下操作: