例如,我的表中的两个字段下面有三行,如下所示
id name
-------
1 brown cat
2 black dog
3 person
这里有一个字符串或一个句子:A brown cat jumps over a person
,如何使用这个字符串来获取第一行和第三行,这是这句话的一部分?据我了解,__contains
和__regex
只能搜索包含目标字符串的字词,但如果该字词是目标字符串的一部分则无效。有没有人对此有想法?
答案 0 :(得分: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())))
答案 1 :(得分: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'}]
答案 2 :(得分:1)
我不认为Django ORM可以实现这一点,但它绝对可以用于原始SQL。这是一个有效的查询:
SELECT id
FROM table
WHERE 'A brown cat jumps over a person'
LIKE '%' || name || '%'
诀窍是使用该列作为搜索短语。这应该是合理的数据库独立性。您可以使用QuerySet的extra method将原始SQL的使用限制在最低限度。