我的Django模型中有这个JSONField:
{
"site-acces": {
"title": "digimon",
"compare": {
"with": "sagromon",
}
},
"site-denied": {
"title": "pokemon",
"compare": {
"with": "salameche",
}
}
}
我想在Django中执行以下操作: 在我的Json中搜索所有标题中包含“ pokemon”的对象。
我尝试过:
pokemon.filter(widgets__contains={'title': 'pokemon'})
但是它不起作用...这使我返回了空的查询集。 所以我也尝试过:
pokemon.filter(widgets__title= 'pokemon')
,但也不起作用。我认为这是行不通的,因为“ title”元位于“ site-denied”内...
所以我问我如何在这个“被拒绝的网站”中搜索字符串。但是要小心!它并不总是“拒绝站点”,有时可能是“站点访问”或其他随机字符串。因此,我无法使用“网站拒绝”字词进行搜索。
答案 0 :(得分:1)
如果只有两个键,请使用Q 或表达式:
from django.db.models import Q
pokemon.filter(
Q(**{'widget__site-acces__title__contains': 'pokemon'}) |
Q(**{'widget__site-denied__title__contains': 'pokemon'})
)
如果您不知道所有可能的键,请考虑将标题存储在其他结构中。