我有模型
class Product(Model):
properties = JSONField()
Run Code Online (Sandbox Code Playgroud)
查询时
Product.objects.values('properties__color')
Run Code Online (Sandbox Code Playgroud)
我得到了正确的结果
从产品中选择 product.properties->color
但是,当我在做我认为等效的事情时
Product.objects.values(color=F('properties__color'))
Run Code Online (Sandbox Code Playgroud)
执行的查询完全不同
SELECT product.properties AS color FROM product
这是 django 的 JSONField 的错误,还是我误解了F()表达式?
您可以使用 plain values('fieldname__lookup'),因为values()从 v2.1 开始支持查找:
Product.objects.values('properties__color')
Run Code Online (Sandbox Code Playgroud)
F然而表达式不支持查找;事实上,他们默默地丢弃了它们,正如你的例子所证明的那样。
使用转换时,当您要查找的字段嵌套超过一层时,JSONField请注意错误。在链接的问题中,如果普通注释values()不够,您还可以找到使用命名注释的解决方案。
| 归档时间: |
|
| 查看次数: |
927 次 |
| 最近记录: |