【发布时间】:2011-08-27 02:31:02
【问题描述】:
我正在尝试找到一种方法来对添加在一起的模型上的两个字段进行注释。比如:
total_done = qs.values(
'ability__ability_name',
).extra(
select={
'total_amount': 'effective_value + overage',
}
).annotate(
total=Sum('total_amount'),
).values(
'ability__ability_name', 'total_amount'
).order_by('-total_amount')
上述方法不起作用并产生错误“无法将关键字'total_amount'解析为字段” 我已经尝试过这里指出的解决方案:Using .aggregate() on a value introduced using .extra(select={...}) in a Django Query? 但是,仍然没有运气得到“无法将关键字 'total_amount' 解析到字段中”
除了在原始 sql 中执行查询作为传入的查询字符串之外的任何其他操作都可能具有已经对其执行的各种过滤器和排除,这使得该前景有点复杂。我还试图避免将字段添加到实际模型并在保存期间计算它的值,除非这是唯一的方法。
【问题讨论】:
-
'total_heal'在您的查询中未提及,希望您的意思是total_amount? -
我最近也遇到了同样的问题。从前面的问题来看,这似乎以前可以工作——它是否有可能(通过设计或偶然)在更高版本中被删除?问题显然不在 SQL 子句中,而在 aggregate() 函数中,因为如果我直接调用 queryset.total_amount 属性,它会很好地工作。
标签: django annotations aggregation extra