Django 2.0 Аннотировать Queryset аннотации - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть набор inspectors, в каждом из которых есть несколько проектов, над которыми они работают, и за которые платят в зависимости от их pay_rate.Моя цель - увеличить среднюю ставку заработной платы inspectors в зависимости от того, в какой компании они работают.Если инспектор работает более чем на одной работе, я хочу использовать его среднее значение pay_rate.

Следующий код ДОЛЖЕН сделать это, но это не так.

i = InspectorProject.objects.all()
uniques = i.order_by('inspector', 
                'project__prime_consultant__name').values('inspector', 
                'project__prime_consultant__name')\
           .annotate(pay_rate=Avg('pay_rate'), bill_rate=Avg('bill_rate'))
# the above code works as expected. here's where it gets fishy.
companies = uniques.order_by(.order_by('project__prime_consultant__name')
                   .values('project__prime_consultant__name')\
                   .annotate(avg_pay=Avg('pay_rate'), avg_bill=Avg('bill_rate'))\

Последняя строкатам дает мне keyError: 'pay_rate' на аннотации.Для меня это означает, что вторая аннотация не распознает атрибут / столбец / поле, созданный первой аннотацией.

1) Почему?

2) Как мне обойти это?

Я включаю bill_rate, чтобы быть тщательным, но проблема явно во второй аннотацииневозможность распознать сгенерированное первое поле.

Заранее спасибо.

1 Ответ

0 голосов
/ 27 сентября 2018

Вы получаете это из-за вашего values звонка.После этого любые дальнейшие манипуляции будут иметь только те поля, которые вы указали в values.Переместите это после аннотации или добавьте pay_rate и bill_rate к вызову values.

...