【问题标题】:Django: using F() expressions on JSONField?Django:在 JSONField 上使用 F() 表达式?
【发布时间】:2019-04-06 15:35:17
【问题描述】:

我有模型

class Product(Model):
    properties = JSONField()

查询时

Product.objects.values('properties__color')

我得到了正确的结果

SELECT product.properties->color FROM product

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

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

执行的查询完全不同

从产品中选择 product.properties 作为颜色

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

【问题讨论】:

  • 好像是个bug,你用的是哪个django版本?
  • @OzgurAkcali:2.2 版

标签: python django


【解决方案1】:

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

Product.objects.values('properties__color')

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 2020-03-17
    • 2016-02-13
    • 2014-02-21
    • 1970-01-01
    相关资源
    最近更新 更多