Django 2.0对注释查询集进行注释

时间:2018-09-26 21:09:02

标签: django django-models django-queryset

我有一组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 :(得分:0)

您正在通过values通话获得此信息。之后,任何进一步的操作将只包含您在values中指定的字段。将其移到注释后,或将pay_ratebill_rate添加到values调用中。