2016-10-09 13 views
1

djangoで検索を実装したいと思います。私は太陽などの検索技術を使用していません。私はdjangoの簡単なフィルタクエリを使用しています。 、私はすべてのフィールドを持つ高度な検索機能を実装する5つの分野namecostbrandexpiry_dateweight とモデルProduct を持って によって: 今、問題はこれですdjangoで検索を実装していません

name = request.GET.get('name') 

私はすべての商品を検索する基準に値を取得します。 私が望むのは、name = Noneの場合、すべての名前を検索する必要があります。 問題はこれです:値がユーザー側で来ない場合、どのようにすべての名前を検索できますか?製品モデルで

答えて

0

名前がNoneときあなたが望むならば、あなたはすべての名前を検索する必要が は、あなたがあなたの検索クエリを示さなかった

if name == None: 
    result = Product.objects.all() 
else: 
    result = Product.objects.filter(name = name) 
+0

名前がNONE'ある場合NONE'はシングルトンオブジェクトである ''として、 'NONE'値をテストするための最も正しい方法です。さらに、 'is'チェックは、これを使うとPython –

1

このロジックを試してみてください。しかし、contains(または大文字と小文字を区別しない一致の場合はicontains)を使用すると、問題の解決に役立ち、姓、名字、一致するテキストを含む名前を検索できるという利点があります。あなたはどうなる

get方法ではなく、デフォルトNone''を返すように指示された

name = request.GET.get('name', '') 
search_result = Product.objects.filter(name__icontains=name) 

注意してください。そして、Pythonのすべての文字列に空の文字列''が含まれていることに注意してください。したがってnamerequestを介して送信されていない場合、その名前にすべて空の文字列''が含まれているため、DB内のProductNULLの名前はありません)が返されます。

+0

で行われた等価チェックよりも高速になるcで行われ、2つのうち1つのvariabaleを渡すと、すべての結果が返されます – vikrant

+0

私は理解できませんさらに詳細に –

0

これを試してみてください:

result = Product.objects.all() 
name = request.GET.get('name', None) 
if name: 
    result = result.objects.filter(name__icontains=name) 
関連する問題