Django 中的过滤器列表 JSON 包含字符串的字段

Filter List in Django JSON Field with string contains

我的 Django JSON 字段包含一个值列表,例如 ["N05BB01", "R06AX33"]。

atc_code = JSONField(default=list())

我想过滤此字段,因为 'does any string in list contain "N05"?'。

喜欢

mymodel.objects.filter(?????)

在这种情况下,如果您不使用 SQLiteOracle,则可以使用 contains:

mymodel.objects.filter(atc_code__contains='N05')

生成这个 SQL:

SELECT * FROM "mymodel" WHERE UPPER("mymodel"."atc_code"::text) LIKE UPPER(%N05%)

基于关系的答案

通常,当以错误的方式使用关系结构时,这种方法(使用 JSONField 中的值列表)是可能的。

此处最佳方法:

  1. 创建一个描述您的 atc_code 实体的新模型。例如AtcCode
  2. 取决于 atc_code 的含义及其与 MainEnity 的关系 使用 ForeignKeyField or ManyToManyField

利用关系数据库和强大的 Django ORM 的所有优点,具有过滤、添加、删除、查询任何数据库后端等内置功能。

它适用于任何支持的数据库。当您正确使用关系时,关系数据库将运行得更快。

我的建议是当你有一个非常非结构化的对象时使用 JSONField。