【问题标题】:Filter List in Django JSON Field with string contains带有字符串的 Django JSON 字段中的过滤列表包含
【发布时间】:2021-11-23 01:48:16
【问题描述】:

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

atc_code = JSONField(default=list())

我想过滤这个字段,因为'列表中的任何字符串是否包含“N05”?'。

喜欢

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

【问题讨论】:

    标签: django django-models django-queryset


    【解决方案1】:

    在这种情况下,如果你没有使用SQLiteOracle,你可以使用contains

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

    生成此 SQL:

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

    【讨论】:

      【解决方案2】:

      基于关系的答案

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

      这里最好的方法:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-21
        • 2020-06-14
        • 1970-01-01
        • 2021-12-31
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        • 2016-01-02
        相关资源
        最近更新 更多