Django Json 字段过滤器抛出查找错误

Posted

技术标签:

【中文标题】Django Json 字段过滤器抛出查找错误【英文标题】:Django Json field filter throws lookup error 【发布时间】:2018-03-02 09:14:22 【问题描述】:

我用的是django postgres JSONfield,模型结构如下

from django.contrib.postgres.fields import JSONField

class JsonAnswer(models.Model):
    name = models.CharField(max_length=255)
    data = JSONField(default=)

Json 字段中的数据如下


 "owner":
    "name":"Bob",
    "other_pets":[
      
       "name":"fishy"
      
    ]
   ,
 "bread":"lab"

而我的过滤查询是这样的

JsonAnswer.objects.filter(data__owner__name="Bob")

这是抛出错误

FieldError: Unsupported lookup 'owner' for JSONField or join on the field not permitted.

请说明如何过滤json字段数据

【问题讨论】:

可能与您的错误无关,但请确保在为 JSONField 设置默认值时,使用 dictdict() 而不是 ,因为它“创建了一个可变的默认值,在JSONField 的所有实例”.. 见 docs 【参考方案1】:

在上面的代码中,JSONField 的类型正确,但错误表明该列在数据库中未定义为 jsonb,无论出于何种原因(这就是我遇到的问题遇到类似的错误)。

【讨论】:

以上是关于Django Json 字段过滤器抛出查找错误的主要内容,如果未能解决你的问题,请参考以下文章

Django 过滤器 has_key 生成错误的 SQL

使用跨越关系的字段查找在 django 模型上进行链式过滤和排除

使用_contains过滤大于,小于和范围的JSON字段django

Django 过滤器是不是存在 json 中的可选键

Jquery自动完成不过滤来自django的JSON数据

使用可变数量的参数过滤多个 Django 模型字段