我有一个自动完成框,需要返回包含输入字的结果。但是输入的单词可以是部分的,也可以按不同的顺序排列。
示例:
数据库列(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中内置的东西,因为这是一个常见的模式?
答案 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