Django中带注释查询集的累计总和

0 投票
1 回答
616 浏览
提问于 2025-04-19 09:39

我有一个用于计算总和的模板标签,长这样:

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)

原因是,在带注解的查询集中,里面的元素不再是模型实例,而是字典。

撰写回答