如何在 DJANGO 中查询包含值列表的 JSONField

Posted

技术标签:

【中文标题】如何在 DJANGO 中查询包含值列表的 JSONField【英文标题】:How to query a JSONField comprising a list of values in DJANGO 【发布时间】:2021-04-18 12:52:27 【问题描述】:

我正在使用JSONField 将配置参数(user_types)存储为如下列表:

["user_type1", "user_type2", "user_type3"]

如何查询过滤类型为“user_type1”的元素?以下查询无效:

rows=ConfigUserTable.objects.filter(user_types__in=["user_type1"])

谢谢

【问题讨论】:

您使用的是哪个数据库后端? 【参考方案1】:

使用contains 查找,它被JSONField 覆盖。例如,以下可能有效:

ConfigUserTable.objects.filter(user_types__contains="user_type1")

但是,这可能取决于您在字段中存储 JSON 数据的方式。如果您将数据存储为字典,那么查询该键肯定会起作用。 IE。在user_types字段中这种格式的数据:

"types": ["user_type1", "user_type2", "user_type3"]

可以这样查询:

ConfigUserTable.objects.filter(user_types__types__contains="user_type1")

参考:https://docs.djangoproject.com/en/dev/topics/db/queries/#std:fieldlookup-jsonfield.contains

【讨论】:

以上是关于如何在 DJANGO 中查询包含值列表的 JSONField的主要内容,如果未能解决你的问题,请参考以下文章

如何编写查询以在 django 的 json 字段中查找值

Django查询多对多子集包含

如何在不使用字段名的情况下运行 django orm 查询?

如何在流分析中查询 JSON 以使包含多个数组值的 JSON 脱离

Cloud Firestore:如何在我的集合查询中获取文档引用并将其映射为 JSON 值?

如何在 Django 中为“in”SQL 子句传递值列表