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

时间:2019-04-06 15:35:18

标签: python django

我有模特

class Product(Model):
    properties = JSONField()

查询时

Product.objects.values('properties__color')

我得到正确的结果

  

选择product.properties->颜色为产品

但是,当我做我认为等同的事情

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

执行的查询完全不同

  

选择product.properties作为产品的颜色

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

1 个答案:

答案 0 :(得分:0)

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

Product.objects.values('properties__color')

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

使用JSONField转换时,当要查找的字段嵌套的深度超过一层时,请注意bug。在链接的问题中,如果普通的values()还不够,您还将找到一种使用命名注释的解决方案。