12

我正在尝试找到一种方法来对添加在一起的模型上的两个字段进行注释。就像是:

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'解析为字段”我已经尝试过此处指示的解决方案:在使用.extra(select = {...})引入的值上使用.aggregate()一个 Django 查询? 但是没有运气仍然得到“无法将关键字'total_amount'解析到字段中”

除了在原始 sql 中执行查询作为传入的查询字符串之外的任何其他操作都可能具有已经对其执行的各种过滤器和排除,这使得该前景有点复杂。我还试图避免将该字段添加到实际模型中并在保存期间计算它的值,除非这是唯一的方法。

4

3 回答 3

2

我认为最好使用用户注释来获取total_amount值:

total_done = qs.values(
'ability__ability_name',
).annotate(
    total_amount=F('effective_value') + F('overage')
    total=Sum('total_amount'),
).values(
    'ability__ability_name', 'total_amount'
).order_by('-total_amount')
于 2017-09-02T01:26:16.300 回答
1

尝试这样的事情:

total_done = qs.extra(select = {'total_amount': 'SUM(one_column + another_column)'}, )
于 2012-02-14T21:21:13.870 回答
0

根据对https://stackoverflow.com/a/4348728/122033的回答(实际上在评论中):“Django 当然将 fullName 作为别名传递,这不适用于 MySQL”——我的猜测既不是使用我一直在使用的 SQLite。:(

于 2012-03-26T18:17:01.637 回答