在模板中,我正在迭代 MyModel 对象。现在在模板中,我想获得特定年份的整数字段的总和。
我不知道如何使用这三个函数来获得字段的总和?或者可能有更好的方法?
型号
class MyModel(models.Model):
date = models.DateField()
field1 = models.DecimalField(default=0.0)
field2 = models.DecimalField(default=0.0)
观看次数
def get_total_field1(year):
return MyModel.objects.filter(date__year=year).annotate(total=Sum('field1'))['total']
def get_total_field2(year):
return MyModel.objects.filter(date__year=year).annotate(total=Sum('field2'))['total']
def get_total(year):
return get_total_field1() + get_total_field2()
class MyView(ListView):
model = MyModel
template_name = 'my_template.html'
模板
{% for obj in objs %}
<tr>
<td>{{obj.date|date:'Y'}}</td>
<td>Field 1 total sum for obj.date </td>
<td>Field 2 total sum for obj.date</td>
<td>Field 1 total + field2 total </td>
{% endfor %}
答案 0 :(得分:1)
模板用于显示数据。计算更像是应该放在 Python 代码中的业务逻辑。所以我的建议是 - 在代码中计算您需要的所有内容(“sum”请参见 .annotate()
Django 方法),然后在您的模板中显示预先计算的变量。
在您的示例中,我会将“get_total_field1”和其他方法作为属性移动到模型本身中,然后您就可以
obj.get_total_field1
在您的模板中。