使用 LIKE 查询 Django 的 HStoreField 值

Query Django's HStoreField values using LIKE

我有一个带有一些 HStoreField 属性的模型,我似乎无法使用 Django 的 ORM HStoreField 来使用 LIKE 查询这些值。

当执行 Model.objects.filter(hstoreattr__values__contains=['text']) 时,查询集仅包含 hstoreattr 具有与 text 完全匹配的任何值的行.

我正在寻找的是一种搜索方式,比方说,te 而不是 text 并且也会返回相同的行。我知道这在原始 PostgreSQL 查询中是可能的,但我正在寻找使用 Django ORM 的解决方案。

据我所知,您无法过滤值。如果要过滤值,则必须传递要引用的列和值。如果您希望它不区分大小写,请使用 __icontains

尽管您不能按所有值进行筛选,但可以按所有键进行筛选。就像您在代码中显示的那样。

如果您想在名为 'fo' 的键中的所有对象中搜索 'text' - 只需这样做:

Model.objects.filter(hstoreattr__icontains={'fo': 'text'})

如果你想检查每个对象中特定键的值是否包含'te',你可以这样做:

Model.objects.filter(hstoreattr__your_key__icontains='te')

如果您想检查 hstore 字段中的 any 键是否包含 'te',您需要在 django 中创建自己的查找,因为默认情况下 django won做这样的事。有关详细信息,请参阅 django 文档中的 custom lookups