2017-05-19 1 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) 

正常に動作します:

これは、ビューの関連する部分です。ユーザーが「ミュンヘン」の検索を検索すると、この都市のすべてのユーザーが返されます。

しかし、誰かが「Peter Munich」を検索した場合、何も返されません。 1つまたは他のすべてのクエリに基づいて結果を引き出す方法はありますか?

+0

を期待通りに動作するはずですあなたのクエリを解析し、

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

のようなクエリからの各フィールドを抽出しなければなりません。問題は各フィールドが文字列全体で一致し、 "Peter Munich"が有効なfirst_nameでも有効なcity_nameでもないことです。 –

答えて

1

あなたは、まずあなたのクエリはORが問題ではありません

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

関連する問題