如何在使用Django mod中JSONField的queryset中使用contain

2024-04-25 00:40:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我的django模型中有一个JSONField:

{
    "site-acces": {
        "title": "digimon",
        "compare": {
            "with": "sagromon",
        }
    },
  "site-denied": {
        "title": "pokemon",
        "compare": {
            "with": "salameche",
        }
    }
}

我想用django做一个查询: 搜索包含“pokemon”标题的我的Json all对象

我试过了:

pokemon.filter(widgets__contains={'title': 'pokemon'})

但它不起作用。。。把空的查询集还给我。 所以我也试过了:

pokemon.filter(widgets__title= 'pokemon')

但不太管用。我认为不工作,因为“标题”元内“网站拒绝”

所以我在问如何在这个“site denied”中搜索字符串。但是小心点!它并不总是“站点拒绝”,有时可能是“站点访问”或其他随机字符串。所以我不能用“网站被拒绝”这个词来搜索


Tags: django字符串模型标题站点title网站with
1条回答
网友
1楼 · 发布于 2024-04-25 00:40:40

如果只能使用两个键,请使用Q表达式:

from django.db.models import Q

pokemon.filter(
    Q(**{'widget__site-acces__title__contains': 'pokemon'}) | 
    Q(**{'widget__site-denied__title__contains': 'pokemon'})
)

如果您不知道所有可能的键,请考虑将标题存储在不同的结构中

相关问题 更多 >