在 Django 中注释 values() 查询

Posted

技术标签:

【中文标题】在 Django 中注释 values() 查询【英文标题】:Annotate a values() query in Django [duplicate] 【发布时间】:2016-08-05 03:44:51 【问题描述】:

我的RelatedModel 有一个指向Product 对象的外键字段。我正在尝试计算每个Product UUID 的RelatedModels 数量。

RelatedModel.objects.all().values(fk_product__uuid).annotate(total=Count('id'))

这给了我:

[
'total': 3, 'fk_product__uuid': UUID('195b6aa8-6a57-62c6-89d1-3397bf69d928'),
'total': 7, 'fk_product__uuid': UUID('2a6a6a98-1a17-4cca-8111-2212b951003a'),
...
]

我希望我的 UUID 键被称为“uuid”,但我很难让 annotate 处理反向关系。有没有办法在不对列表进行后处理的情况下做到这一点?

【问题讨论】:

哦,太好了!谢谢尚,我没有搜索“重命名”,只是“注释”。答案是使用django.db.models.F 【参考方案1】:

参考尚的建议(测试和工作):

q = Product_r.objects.all().annotate(uuid=F('fk_product__uuid')).values('uuid').annotate(total=Count('id')).order_by('total')

【讨论】:

以上是关于在 Django 中注释 values() 查询的主要内容,如果未能解决你的问题,请参考以下文章

使用注释时在 Django 中显示选择字段的名称

Django查询带注释并选择相关的一起

如何查询 Django ArrayField 的长度?

通过 Django ORM 重命名嵌套注释字段

注释总和的 Django 聚合平均值(1.6.5)

使用 django 查询 set values() 索引到 JSONField