dan*_*ana 2 django search django-q
我有一个按姓名搜索的功能,如果搜索与名字或姓氏匹配,则应该返回一个人的姓名.问题是,如果我搜索像'firstname lastname'这样的字符串,它找不到匹配的名称(猜测是因为单词之间的空格).我应该怎么做才能找到合适的搜索?此外,如果我想用相同的搜索搜索用户名(在另一个表中)我该怎么办?非常感谢!
我的代码:
def search(request):
query = request.GET.get('q', '')
if query:
qset1 = (
Q(first_name__icontains=query) |
Q(last_name__icontains=query)
)
results = UserProfile.objects.filter(qset1).distinct()
else:
results = []
return render_to_response("search/searchName.html", {
'results': results,
'query': query},
context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
Bar*_*tek 11
现在你的解析根本没有拆分查询,你可以这样做,遍历结果,并自己构建一个Q对象放在你的查询中.
import operator
queries = request.GET.get('q').split()
qset1 = reduce(operator.__or__, [Q(first_name__icontains=query) | Q(last_name__icontains=query) for query in queries])
results = UserProfile.objects.filter(qset1).distinct()
Run Code Online (Sandbox Code Playgroud)
这基本上要做的是将查询拆分起来,并在完成你正在做的事情的同时循环遍历每个单词.因此,如果他们搜索"Frank Podolski",它将检查"Frank"是否在名字,姓氏中,然后如果"Podolski"也在名字,姓氏中,而不是整个查询中.
当然,你可以做更多的事情来改善搜索,例如词干,删除停止词等,但这不属于这个问题的背景.
| 归档时间: |
|
| 查看次数: |
2172 次 |
| 最近记录: |