Django中带注释查询集的累计总和
我有一个用于计算总和的模板标签,长这样:
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)
但还是不行。
1 个回答
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)
原因是,在带注解的查询集中,里面的元素不再是模型实例,而是字典。