【发布时间】:2021-11-23 01:48:16
【问题描述】:
我的 Django JSON 字段包含一个值列表,例如 ["N05BB01", "R06AX33"]。
atc_code = JSONField(default=list())
我想过滤这个字段,因为'列表中的任何字符串是否包含“N05”?'。
喜欢
mymodel.objects.filter(?????)
【问题讨论】:
标签: django django-models django-queryset
我的 Django JSON 字段包含一个值列表,例如 ["N05BB01", "R06AX33"]。
atc_code = JSONField(default=list())
我想过滤这个字段,因为'列表中的任何字符串是否包含“N05”?'。
喜欢
mymodel.objects.filter(?????)
【问题讨论】:
标签: django django-models django-queryset
在这种情况下,如果你没有使用SQLite或Oracle,你可以使用contains:
mymodel.objects.filter(atc_code__contains='N05')
生成此 SQL:
SELECT * FROM "mymodel" WHERE UPPER("mymodel"."atc_code"::text) LIKE UPPER(%N05%)
【讨论】:
通常,当关系结构以错误的方式使用时,这种方法(在 JSONField 中使用值列表)是可能的。
这里最好的方法:
atc_code 实体的新模型。例如AtcCode
MainEnity 使用ForeignKeyField 或ManyToManyField 的关系
利用关系数据库和强大的 Django ORM 的所有优点,以及过滤、添加、删除、查询任何数据库后端等内置功能。
它将适用于任何受支持的数据库。当您正确使用关系时,关系数据库将运行得更快。
我的建议是当你有一个非常非结构化的对象时使用 JSONField。
【讨论】: