2

例如,我的表中的两个字段下有三行,如下所示

id name
-------
1  brown cat
2  black dog
3  person

这里来了一个字符串,或者一个句子:A brown cat jumps over a person,我如何使用这个字符串来获取第一行和第三行,这是这句话的一部分?据我了解,__contains 并且__regex只能搜索包含目标字符串的术语,但如果该术语是目标字符串的一部分,则将不起作用。有没有人对此有想法?

4

3 回答 3

2

你可以这样做:

import operator
from django.db.models import Q

sentence = 'A brown cat jumps over a person'
queryset = MyModel.objects.filter(reduce(operator.or_, (Q(myfield__icontains=word) for word in sentence.split())))
于 2013-11-05T15:30:30.217 回答
2

以下查询将执行:

>>> sentence = 'A brown cat jumps over a person'
>>> MyModel.objects.extra(where={"%s like CONCAT('%%', `name` ,'%%')"}, 
...                       params=[sentence]).values()
[{'id': 1L, 'name': u'brown cat'}, {'id': 3L, 'name': u'person'}]
于 2013-11-05T16:02:46.770 回答
1

我认为这对于 Django ORM 是不可能的,但对于原始 SQL 绝对是可行的。这是一个有效的查询:

SELECT id
FROM table
WHERE 'A brown cat jumps over a person'
      LIKE '%' || name || '%'

诀窍是使用该列作为搜索短语。这应该合理地独立于数据库。您可以使用 QuerySet 的额外方法将原始 SQL 的使用限制在最低限度。

于 2013-11-05T16:07:17.017 回答