4

我在 Django.users 上问过这个问题,但没有回应。我最近升级到 Django 1.8,以便利用对 HStore 字段的本机支持(不使用 django-hStore),但我遇到了这个问题。我不确定这是否是一个错误,或者是否有未记录的方法来执行此操作。

我试图在给定模型中查找其 HStore 字段中的“值”包含字符的所有对象。但是,“__contains”搜索仅在搜索项目与其值完全匹配时才有效。

从我自己的应用程序中(我删除了一些查询集结果以使其更易于阅读)

>>> query1
[<LanguageDatum: \xf0i, This (m), And, >, <LanguageDatum: hadi, This (f), AfgA, >, <LanguageDatum: -e, His, ArBah, >, '...(remaining elements truncated)...']
>>> query1.filter(multigloss__values__contains=["This"])
[]
>>> query1.filter(multigloss__values__contains=["This (f)"])
[<LanguageDatum: hadi, This (f), AfgA, >,  <LanguageDatum: \xf0i, This (f), ArAnz, >, '...(remaining elements truncated)...']
>>> query1.filter(multigloss__values__contains=["His"])
[<LanguageDatum: -e, His, ArBah, >, <LanguageDatum: -eh, His, ArBah, >, <LanguageDatum: -hu, His, Chd, >, <LanguageDatum: -u, His, Chd, > '...(remaining elements truncated)...']
>>> query1.filter(multigloss__values__contains=["Hi"])
[]

预期的结果将是查询将返回其“multigloss”值包含该字符串的任何数据,而不仅仅是那些完全相同的字符串。

如果您没有包含整个单词“collie” ,文档中的示例也应该失败(我没有测试过,这是一个假设的结果):

>>> Dog.objects.create(name='Rufus', data={'breed': 'labrador'})
>>> Dog.objects.create(name='Meg', data={'breed': 'collie', 'owner': 'Bob'})

>>> Dog.objects.filter(data__values__contains=['collie'])
[<Dog: Meg>]

>>>#Hypothesized example!
>>> Dog.objects.filter(data__values__contains=['coll'])
[]
>>>#Should have returned [Dog: Meg]

有没有办法做我在这里尝试做的查询,或者我发现了一个错误?

4

0 回答 0