Django:如何在 JSONField 上使用 F() 表达式?

9

我有这个模型

class Product(Model):
    properties = JSONField()

当进行查询时,

Product.objects.values('properties__color')

我得到了正确的结果

从产品中选择product.properties -> 颜色

但是,当我做我认为相等的操作时

Product.objects.values(color=F('properties__color'))

正在执行的查询完全不同。

从产品中选择属性作为颜色:SELECT product.properties AS color FROM product

这是Django的JSONField的一个bug,还是我误解了F()表达式?


看起来像是一个bug,你使用的Django版本是哪个? - Ozgur Akcali
@OzgurAkcali:版本2.2 - blue_note
1个回答

7

从 v2.1 开始,您可以使用简单的 values('fieldname__lookup'),因为 values() 支持查找:

Product.objects.values('properties__color')

F表达式不支持查找;事实上,正如您的示例所证明的那样,它们会默默地舍弃它们。

当使用JSONField转换时,请注意,如果要查找的字段嵌套超过一层,则可能会出现错误。在链接的问题中,您还将找到一种使用命名注释的解决方案,如果简单的values()不足够。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接