Django Annotate-我可以将在Annotate中创建的字段用于在Annotate中创建的另一个字段吗?

时间:2020-10-15 22:26:18

标签: django django-rest-framework django-orm

我正在按部门计算分数的总和以及每个部门的用户数量,如下所示:

queryset = Depts.objects.annotate(total_pts=Sum('userprofiles__user__activity_user__activity_category__pts'), total_users=Count('userprofiles', distinct=True)).order_by('-total_pts')

我还想作为返回数据的一部分发送回avg_score = total_pts / total_users。有没有办法将其添加到注释中,或将它们链接在一起,或者以其他方式将其添加到返回查询集中?

编辑:

我尝试添加以下内容:

queryset = Depts.objects.annotate(total_pts=Sum('userprofiles__user__activity_user__activity_category__pts'), total_users=Count('userprofiles', distinct=True), avg_score=total_pts/total_users).order_by('-total_pts')

错误指出未定义total_pts。

谢谢。

1 个答案:

答案 0 :(得分:0)

使用F()弄清楚了它,以前从未完全了解如何使用它:

queryset = Depts.objects.annotate(total_pts=Sum('userprofiles__user__activity_user__activity_category__pts'), total_users=Count('userprofiles', distinct=True), avg_score=F('total_pts') / F('total_users')).order_by('-avg_score')