2017-05-19 71 views
0

我有一個搜索字段,用戶可以在其中搜索用戶的配置文件。如何根據視圖中的多個查詢拉動Django對象? Django

這是視圖的相關部分:

elif 'q' in request.GET: 
context_dict={} 
try: 
    q = request.GET.get('q') 

    users = User.objects.filter(Q(username__icontains=q) 
     | Q(first_name__icontains=q) | Q(last_name__icontains=q) 
     | Q(email__icontains=q) | Q(profile__city__name__icontains=q)) 

    context_dict['users'] = users 

    return render(request, 'proj_name/people_search.html', context_dict) 

工作正常 - 如果某些搜索「彼得」它帶回它的第一個名字是彼得的所有用戶。如果用戶搜索搜索「慕尼黑」,它將帶回該城市的所有用戶。

但是,如果有人搜索「彼得慕尼黑」,它不會帶回任何東西。有沒有辦法根據所有查詢而不是一個或另一個查詢結果?

+0

的或者是沒有問題的;問題是每個字段都匹配整個字符串,「Peter Munich」既不是有效的first_name,也不是有效的city_name。 –

回答

1

你應該先分析您的查詢和提取查詢每個字段像

q = request.GET.get('q') 
first_name = q['first_name'] 
last_name = q['last_name'] 
username = first_name + last_name 
city = q['city'] 

然後將查詢應該按預期工作

users = User.objects.filter(Q(username__icontains=username) 
| Q(first_name__icontains=first_name) | Q(last_name__icontains=last_name) 
| Q(profile__city__name__icontains=city)) 
+0

用戶將搜索隨機事件,以便查詢不會是這種結構。但是我從你的答案中學到的是,我可以在高級搜索選項中按照你的建議解析查詢。謝謝。 – Seio