Джанго аннотации на поле добавлены с дополнительными - PullRequest
10 голосов
/ 17 мая 2011

Я пытаюсь найти способ сделать аннотацию для двух полей в модели, добавленной вместе.Что-то вроде:

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 »в поле». Я уже пробовал решение, указанное здесь: Использование .aggregate () длязначение, введенное с помощью .extra (select = {...}) в запросе Django? Однако не повезло получить «Не удается разрешить ключевое слово total_amount» в поле »

Что-либо, кроме выполнения запросав raw sql передаваемая строка запроса может иметь различные фильтры и исключать уже выполненные над ней, что делает эту перспективу немного сложной.Я также пытаюсь избежать добавления поля к фактической модели и вычисления его значения во время сохранения, если только это не единственный способ.

Ответы [ 3 ]

1 голос
/ 02 сентября 2017

Я думаю, что лучше для аннотации пользователя получить значение 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')
1 голос
/ 15 февраля 2012

Попробуйте что-то вроде этого:

total_done = qs.extra(select = {'total_amount': 'SUM(one_column + another_column)'}, )
0 голосов
/ 26 марта 2012

Согласно ответу на https://stackoverflow.com/a/4348728/122033 (на самом деле в комментариях): «Django, конечно, передает fullName как псевдоним, который не работает с MySQL» - и я думаю, что ни с SQLite, которыйЯ использую.(

...