在 Django 中使用带注释的查询集运行总计
Posted
技术标签:
【中文标题】在 Django 中使用带注释的查询集运行总计【英文标题】:Running total with annotated querysets in Django 【发布时间】:2014-10-26 19:19:28 【问题描述】:我有一个运行的总模板标签,看起来像
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)
但还是不行。
【问题讨论】:
使用比list
更好的名称。您正在覆盖默认类型。
【参考方案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)
原因是带注释的查询集中的元素不再是模型实例,而是字典。
【讨论】:
以上是关于在 Django 中使用带注释的查询集运行总计的主要内容,如果未能解决你的问题,请参考以下文章