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

     2023-02-24     290

关键词:

【中文标题】Django Annotate - 我可以将在 annotate 中创建的字段用于在 annotate 中创建的另一个字段吗?【英文标题】:Django Annotate - Can I used the fields created in annotate for another field created in annotate? 【发布时间】:2021-01-30 11:08:17 【问题描述】:

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

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】:

用 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')

【讨论】:

Django 聚合计数

...模型。我有一个模型A和一个模型B,模型A上有一个外键。annotate_pool=queryset.annotate(nb_bets=Count(\'bets\')).all()forobjinannotate_pool:bets_obj=obj.bets.all( 查看详情

Django annotate() 多次导致错误答案

】Djangoannotate()多次导致错误答案【英文标题】:Djangoannotate()multipletimescauseswronganswers【发布时间】:2010-11-1821:47:57【问题描述】:Django为查询集提供了很棒的新annotate()函数。但是,对于单个查询集中的多个注释,我无法使其正... 查看详情

Django 条件注释

...个问题显然还不存在。如果有,请帮我找到它。我想使用annotate(Count)和order_by,但我不想计算相关对象的每个实例,只计算满足某个标准的那些。也就是说,我可以按照燕子携带的绿色椰子的数量来列出燕子:swallow.objects.annotate(... 查看详情

使用 annotate() 包含一个 django 模型对象属性

】使用annotate()包含一个django模型对象属性【英文标题】:Includeadjangomodelobjectpropertyusingannotate()【发布时间】:2018-10-2808:10:10【问题描述】:我有一个包含@property的模型,我希望在执行以下操作时包含该模型vals=MyModel.objects.values()... 查看详情

072:django数据库orm聚合函数详解-aggregate和annotate(代码片段)

ORM聚合函数详解-aggregate和annotate:aggregate和annotate的区别:1、aggregate:返回使用聚合函数后的字段和值。2、annotate:在原来模型字段的基础之上添加一个使用了聚合函数的字段,并且在使用聚合函数的时候,会使用当前这个模型... 查看详情

django基础aggregate和annotate方法使用详解与示例

...django的aggregate方法支持的聚合操作有AVG/COUNT/MAX/MIN/SUM等。annotate()方法详解annotate的中文意思是注释,我觉得是非常地词不达意,一个更好的理解是分组(GroupBy)。如果你想要对数据集先进行分组然后再进行某些聚合操作或排序时,... 查看详情

使用 annotate Exists 时提高 Django 查询集性能

】使用annotateExists时提高Django查询集性能【英文标题】:ImproveDjangoquerysetperformancewhenusingannotateExists【发布时间】:2019-11-2722:14:58【问题描述】:我有一个返回大量数据的查询集,它可以按年份过滤,返回大约100k行,或者显示所... 查看详情

Django annotate 返回了多个

】Djangoannotate返回了多个【英文标题】:Djangoannotatereturnedmorethanone【发布时间】:2018-09-2215:45:43【问题描述】:user=get_object_or_404((User.objects.annotate(company_name=F(\'usercompany__company__company_name\')).annotate(project=F(\'team_ 查看详情

Django:仅使用 annotate() 和 values() 计算非空 CharField

】Django:仅使用annotate()和values()计算非空CharField【英文标题】:Django:Countonlynon-emptyCharFieldwithannotate()&values()【发布时间】:2014-07-1405:28:43【问题描述】:Djangorecommends没有在null上使用CharField,但是annotate在计数中包含空字符串... 查看详情

Django - 从子查询中注释多个字段

】Django-从子查询中注释多个字段【英文标题】:Django-AnnotatemultiplefieldsfromaSubquery【发布时间】:2020-07-0915:06:07【问题描述】:我正在开发一个Django项目,在该项目上我有一个“A”对象(A.objects.all())的查询集,并且我需要从“B”... 查看详情

Django Annotate - 获取不同字段值的列表

】DjangoAnnotate-获取不同字段值的列表【英文标题】:DjangoAnnotate-getlistofdistinctfieldvalues【发布时间】:2019-04-0601:20:42【问题描述】:我有3个模型-Book、Page和Language。classBook(models.Model):title=models.CharField(max_length=100)author=models.CharField( 查看详情

在 Django 框架中读取过滤器查询集

...特定站点销售汽车所获得的总收入总和。我已经尝试使用annotate方法来获取结果。我已经使用annotate编写了一个查询集。mum_data=Cars_Showroom_Filter( 查看详情

aggregate和annotate使用(代码片段)

aggregate和annotate方法的使用场景Django的aggregate和annotate方法属于高级查询方法,主要用于组合查询,是Django高手们必需要熟练掌握的。当我们需要对查询集(queryset)的某些字段进行计算或进行先分组再计算或排序,我们就需要使用agg... 查看详情

用静态日期注释 - Django

】用静态日期注释-Django【英文标题】:Annotatewithastaticdate-Django【发布时间】:2020-04-1012:49:57【问题描述】:我正在尝试在Django中使用静态日期注释查询集。它可以使用整数(而不是日期):fromdjango.db.modelsimportValue,IntegerFieldcars=C... 查看详情

通过连接获取所有字段。 DJANGO

...Author的字段,通过单个查询?【问题讨论】:你可以使用annotate【参考方案1】:Books.objects.select 查看详情

Django的注释和聚合方法之间的区别?

...合方法之间的区别?【英文标题】:DifferencebetweenDjango\'sannotateandaggregatemethods?【发布时间】:2011-12-2009:02:57【问题描述】:Django的QuerySet有两个方法,annotate和aggregate。文档说:与aggregate()不同,annotate()不是终结子句。annotate()子... 查看详情

Django annotate Concat - 表达式包含混合类型。您必须设置 output_field

】DjangoannotateConcat-表达式包含混合类型。您必须设置output_field【英文标题】:DjangoannotateConcat-Expressioncontainsmixedtypes.Youmustsetoutput_field【发布时间】:2017-07-0314:51:24【问题描述】:我有一个模型:classMotocycle(models.Model):title=models.Cha... 查看详情

Django 查询中的额外 GROUP BY 子句

...:我已经编写了这个DjangoORM查询:queryset=Test.objects.all()\\.annotate_test_date()\\#similartoextracthour.annotate_test_time()\\#similartoex 查看详情