使用Django queryset在列中搜索多个单词

时间:2012-05-13 07:14:27

标签: django django-queryset

我有一个自动完成框,需要返回包含输入字的结果。但是输入的单词可以是部分的,也可以按不同的顺序排列。

示例:

数据库列(MySQL)中的值 -

Expected quarterly sales
Sales preceding quarter
Profit preceding quarter
Sales 12 months

现在,如果用户输入quarter sales,那么它应该返回前两个结果。

我试过了:

column__icontains = term  #searches only '%quarter sales% and thus gives no results
column__search = term  #searches any of complete words and also returns last result
**{'ratio_name__icontains':each_term for each_term in term.split()}   #this searches only sales as it is the last keyword argument

任何通过正则表达式的技巧或者可能是我在Django中内置的东西,因为这是一个常见的模式?

1 个答案:

答案 0 :(得分:5)

搜索引擎更适合此任务,但您仍可以使用基本代码执行此操作。 如果你正在寻找包含" A"和" B",你可以

Model.objects.filter(string__contains='A').filter(string__contains='B')

Model.objects.filter(Q(string__contains='A') & Q(string__contains='B'))

但实际上,你最好使用一个简单的全文搜索引擎,配置很少,比如Haystack / Whoosh