我有一个带有一些HStoreField属性的模型,我似乎无法使用Django的ORM HStoreField来使用LIKE查询这些值。
执行Model.objects.filter(hstoreattr__values__contains=['text'])
时,查询集只包含hstoreattr
具有与text
完全匹配的任何值的行。
我正在寻找的方法是搜索te
而不是text
,并返回相同的行。我知道在原始PostgreSQL查询中这是可能的,但我正在寻找一种使用Django ORM的解决方案。
答案 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'})