Django:在过滤器和搜索中使用 JSONField 属性
Posted
技术标签:
【中文标题】Django:在过滤器和搜索中使用 JSONField 属性【英文标题】:Django: use JSONField properties in filter and search 【发布时间】:2013-07-06 03:48:14 【问题描述】:我正在尝试在 Django 列表视图中创建自定义 filter 和 search,它们将使用存储在 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 过滤器为给定模型中的所有字段创建一般搜索