2016-06-24 23 views
0

データベースには多くの書籍があります。データベースを検索すると何も返されません(空のクエリセット)。メニューでdjangoで検索機能を実装する方法は?

<form name="myform" method="POST" action="{% url 'search' %}"> 
    {% csrf_token %} 
    <input type="text" name="search" placeholder="Search" /> 
</form> 

views.py、

def search(request):   
    if request.method == 'POST':  
     book_name = request.POST.getlist('search')  
     try: 
      status = Add_prod.objects.filter(bookname__icontains=book_name) 
      #Add_prod class contains a column called 'bookname' 
     except Add_prod.DoesNotExist: 
      status = None 
     return render(request,"search.html",{"books":status}) 
    else: 
     return render(request,"search.html",{}) 

マイテンプレートファイル、あなたがforを使用する必要があるように本があるので

{% if books %} 
    <a href="{% url 'buy_book' pk=books.pk %}"> 
    <!--Upon successful search book image with hyperlink appears --> 
    <img src="{{books.image.url}}" alt="No Image"></a> 
    <p>{{books.bookname}}</p> 
    <p>Rs.{{books.price}}</p> 
{% endif %} 
+0

いくつかのユースケースには適していますが、必要に応じてドキュメントベースの検索もご覧ください。 https://docs.djangoproject.com/en/dev/topics/db/search/#document-based-search – keni

答えて

1

私は追加したい物事のカップルがあります。ここ...

1)検索結果はPOSTではなくGETメソッドであるべきだと思います。あなたは)Djangoのテンプレートは、今

{% if books %} 
{% for each_book in books %} // books is list here so pick each element using for loop 
    <a href="{% url 'buy_book' pk=each_book.pk %}"> 
    <!--Upon successful search book image with hyperlink appears --> 
    <img src="{{each_book.image.url}}" alt="No Image"></a> 
    <p>{{each_book.bookname}}</p> 
    <p>Rs.{{each_book.price}}</p> 
{% endfor %} 
{% endif %} 

これでなければなりません

def search(request):   
    if request.method == 'GET': # this will be GET now  
     book_name = request.GET.get('search') # do some research what it does  
     try: 
      status = Add_prod.objects.filter(bookname__icontains=book_name) # filter returns a list so you might consider skip except part 
     return render(request,"search.html",{"books":status}) 
    else: 
     return render(request,"search.html",{}) 

3のviews.py)POSTを使用するときに表示すると

<form name="myform" method="GET" action="{% url 'search' %}"> 
// see if you need csrf_token here when this is GET request. Your homework 

2をGETを使用するときthisリンクを参照する場合がありますうまく動作するはずです。

また、検索結果を取得するためにいくつかのデータがdbにあることを確認してください。

+0

あなたのurls.pyファイルを共有できますか?私はあなたがそこに乱れていると思う –

+0

request.POST.get()はうまくいきませんでしたので、私はそれをrequest.GET.get()に変更しました、今はその作業 – Bhanukiran

+0

くそー!私はそれを逃した..私はそれを更新します。 –

1

は、ルックスクエリーセット

テンプレートには、試してみてください。

{% if books %} 
{% for book in books %} 
    <a href="{% url 'buy_book' pk=book.pk %}"> 
    <!--Upon successful search book image with hyperlink appears --> 
    <img src="{{book.image.url}}" alt="No Image"></a> 
    <p>{{book.bookname}}</p> 
    <p>Rs.{{book.price}}</p> 
{% endfor %} 
{% endif %} 

そして、あなたの意見では:代わりに

book_name = request.POST.getlist('search') 

試してみてください。

book_name = request.POST.get('search') 
+1

@Bhanukiranは私の編集を見ます –

+0

@Bhanukiranあなたのモデルを表示できますか?代わりにbook.idを使用する必要がありますbook.pk –

+0

あなたのurls.pyファイルを共有できますか? – Bhanukiran

関連する問題