我有一个运行的总模板标签,看起来像
from django.template import Library
register = Library()
@register.filter
def running_total(list, var_name):
return sum(getattr(obj, var_name) or 0 for obj in list)
当我在普通查询集中需要运行总计时,它可以工作,但是当我使用带注释的查询集时,我得到异常'dict' object has no attribute 'total'
。
当我在模板中打印普通查询集时,我得到[<Item: Item #1>]
,但是当我打印带注释的查询集时,我会得到一个带有元组[{'total_amount': Decimal('0.00'), ...]
的列表。
我应该以某种方式转换我的模板标签中的列表吗?
我尝试过添加
list = list(list)
但它仍然不起作用。
答案 0 :(得分:1)
arr = []
for obj in list:
if isinstance(obj, dict):
arr.append(obj[var_name] if var_name in obj else 0)
else:
arr.append(getattr(obj, var_name) or 0)
return sum(arr)
原因是带注释的查询集中的元素不再是模型实例,它是dict。