在Django中使用带注释的查询集运行总计

时间:2014-09-02 13:40:56

标签: python django django-models django-templates django-queryset

我有一个运行的总模板标签,看起来像

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 个答案:

答案 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。