使用 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。
我有一个带有一些 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。