使用LIKE查询Django的HStoreField值

时间:2016-09-19 14:11:21

标签: django python-3.x hstore

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

虽然您无法按所有值进行过滤,但您可以按所有键进行过滤。就像你在代码中展示的一样。

如果你想在名为“fo”的键中的所有对象中搜索“text” - 只需像这样做smth:

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