是否可以使用ILIKE(icontains)运算符搜索字典列表中的一个键值?我的json字段看起来像这样:
object = MyModel()
object.json_data = [
{
"type": 1,
"results": [
{
"score": 1,
"comment": "Some text comment 1",
},
{
"score": 2,
"comment": "Some text comment 2",
},
{
"score": 3,
"comment": "Some text comment 3",
}
]
},
{
"type": 2,
"results": [
{
"score": 4,
"comment": "Some text comment 4",
},
{
"score": 5,
"comment": "Some text comment 5",
},
{
"score": 6,
"comment": "Some text comment 6",
}
]
}
]
object.save()
Run Code Online (Sandbox Code Playgroud)
现在,如何编写查询以在"注释"键中搜索?
MyModel.objects.filter(json_data__??__results__??__comment__icontains="text comment")
Run Code Online (Sandbox Code Playgroud)
我正在使用Django 1.9.
谢谢!
The*_*heo 11
这对我有用(注意[])
query = User.objects.filter(data__campaigns__contains=[{'key': 'value'}])
Run Code Online (Sandbox Code Playgroud)
T. *_*tal 10
你应该能够简单地通过链接来搜索,django风格:
MyModel.objects.filter(json_data__results__contains={"comment":"text comment"})
Run Code Online (Sandbox Code Playgroud)
查看Django 1.9中JSON字段的文档:https: //docs.djangoproject.com/es/1.9/ref/contrib/postgres/fields/#querying-jsonfield
其中包括contains查询:http:
//psocdddang目录
如果这对于不区分大小写不起作用,那么我会看到它产生什么查询,并简单地用额外的地方重新编写它:
MyModel.objects.extra(where=["json_data->>'results'->'comment' ILIKE %s"], params=["%text comment%"])
Run Code Online (Sandbox Code Playgroud)
或者您可以使用postgres文档中所述的json特定符号,例如 <@
http://www.postgresql.org/docs/9.5/static/functions-json.html