2016-09-10 10 views
0

私はdjangoプロジェクトのリスティングに取り組んでいます。このシナリオは、FAQリストページをクリックすると、それが私がすべてのFAQを取得するリストにリダイレクトされます。今私は別のキーワードを使用して検索する必要があります。特定の結果を検索するための合計5つのキーワードがあります。コードはajaxを使用したdjangoでのマルチカラム検索

questions = Help.objects.all().filter().values('id','question','description','status','created','modified').order_by('-id') 
if 'question' in ajax_data: 
    #add filter for question 
if 'description' in ajax_data: 
    #add filter for description 
if 'status' in ajax_data: 
    #add filter for status 
if 'created' in ajax_data: 
    #add filter for created 
if 'modified' in ajax_data: 
    #add filter for modified 
questions = Help.objects.all().filter(#add all conditions here dynamically after applying filters).values('id','question','description','status','created','modified').order_by('-id') 

ページを更新すると、それは今AJAXフィルタを使用して、すべてのデータを返す最初のクエリを実行最初に適用する必要があり、私はちょうどこの検索のロジックをしたいすべてのAJAXコードを行っています。検索は、質問に応じてフィルタする必要がありますが、質問、ステータスを使用して検索し、ファイルを作成した場合は、これらの3つのキーワードすべてに対してフィルタを適用する必要があります。あなたはタイトルによってフィルタを持っている場合

答えて

3
questions = Help.objects.all() 
filters = {} 
if 'question' in ajax_data: 
    filters['question'] = ajax_data.get('question') 
if 'description' in ajax_data: 
    filters['description'] = ajax_data.get('description') 
if 'status' in ajax_data: 
    filters['status'] = ajax_data.get('status') 
if 'created' in ajax_data: 
    filters['created'] = ajax_data.get('created') 
if 'modified' in ajax_data: 
    filters['modified'] = ajax_data.get('modified') 
questions = questions.filter(**filters).values('id','question','description','status','created','modified').order_by('-id') 

チェックこのリンクhttps://docs.python.org/3/glossary.html#term-argument

+0

しかし、これはどのように使用することができます演算子よりも少ないか含まれています – Pankaj

+0

フィルタ['created__gt']、フィルタ['created__lt']などを使用することができます – Anoop

0

あなたは、例えばrequest.GET.get('filter_name')

を使用することができます。

query = Model.objects.all() 
title = request.GET.get('title')  
if title: 
    query = query.filter(title__icontains=title) 

...and so on 

ノートあなたのURLは次のようにパラメータを取得含まれている必要がありhttp://myurl.com/?title=abc

EDIT 1つのクエリフィルタ用Qオブジェクトを使用することができますdjango.db.models

filter = Q() 
if title: 
    filter &= Q(title__icontains=title) 
if category: 
    filter &= Q(category__icontains=category) 
query = query.filter(filter) 
+0

が、私は3つのフィルタを適用した場合、それが実行されるように、この関数は常に、キーワードを複数のクエリを実行しますが、3回を照会、それぞれのフィルタ条件を作成することはできませんif文と最後にその条件でクエリを実行します – Pankaj

+0

チェックを編集@Pankaj – arcegk

+0

エラーグローバル名Qが定義されていません – Pankaj

関連する問題