Django:在过滤器和搜索中使用 JSONField 属性

Posted

技术标签:

【中文标题】Django:在过滤器和搜索中使用 JSONField 属性【英文标题】:Django: use JSONField properties in filter and search 【发布时间】:2013-07-06 03:48:14 【问题描述】:

我正在尝试在 Django 列表视图中创建自定义 filtersearch,它们将使用存储在 JSONField 中的值,就像它们被定义为常规模型字段。

我想我需要定义一个带有自定义 get_queryset() 函数的模型管理器,但我不确定如何将 json 数据“脱水”并将其作为查询集的一部分返回。

到目前为止,其他一些方法都失败了:我可以将值插入到自定义 ListView 中的上下文字典中,但无法查询该上下文。还尝试在 admin.py 中定义属性并将一些 @property 定义包装在 models.py 中;在这里遇到同样的问题,因为无法查询属性。

有什么建议吗?

【问题讨论】:

***.com/a/10450635/1698426 满足您的需求吗? 【参考方案1】:

您不能这样做(无论如何,在普通的 RDBMS 中)。

过滤器由数据库评估,它对 JSON 中的字段一无所知:它只是一个不透明的 blob。如果您需要搜索这些字段,则需要将它们存储为适当的数据库可访问数据。

【讨论】:

【参考方案2】:

如果(且仅当)您使用的是 PostgreSQL,您可以这样做

看看如何在 Django 文档中query JSONField in PostgreSQL。

【讨论】:

以上是关于Django:在过滤器和搜索中使用 JSONField 属性的主要内容,如果未能解决你的问题,请参考以下文章

使用过滤器时如何使用 django_tables2 进行搜索

尝试使用 django 过滤器为给定模型中的所有字段创建一般搜索

Django rest api - 使用搜索过滤器搜索方法字段

使用 django_filters 创建 OR 过滤器

如何在 django 中进行复杂的搜索?使用视图还是模型?

使用可变数量的参数过滤多个 Django 模型字段