2016-09-23 9 views
0

検索フォームに問題があります。私は、データベースを照会し、結果ページに結果を返す検索フィールドを作成しようとしています。私は、特定のクエリで1つの結果を返し、複数の行で他のクエリを返します。get()は複数のMyModelを返しました - それは791を返しました!。これは、私がDjango Formsを初めて使うときには馬鹿に思えるかもしれません。他の情報が必要な場合はお知らせください。私は.filterを使ってみましたが、何も返しません。私は複数のSOの質問を見て、いくつかは助けても、まだ少し問題があります。私のコードは以下の通りです:Django - get()が返されたものが複数返されました。

views.py

from django.shortcuts import render 
from .models import Model 


def index(request): 
    return render(request, 'index.html') 


def search(request): 
    query = request.GET.get('q') 
    if query: 
     query = str(query) 
     results = myModel.objects.get(
      site=query 
     ) 
     context = {"results": results} 
    return render(request, 'results.html', context) 

results.html

{% if results %} 
    <ul> 
     <li><p>{{ results.url }}</p></li> 
    </ul> 
{% else %} 
    <p>Nothing Available.</p> 
{% endif %} 

index.htmlを

<form action="/results/" method="GET"> 
{% csrf_token %} 
<input id="search_box" type="text" name="q" placeholder="Search..."> 
<button id="search_submit" type="submit" class="btn btn-defaultbtnlg"><i class="fa fa-search fa-fw"></i> <span class="networkname">Search</span></button> 
</form> 
+0

あなたのSQLクエリのポイントは何ですか?あなたはそれを実行し、結果を無視し、Djangoモデル呼び出しで同じことを行います。 –

+0

@DanielRoseman私はそれを取ってそれを編集できるようにしました。 –

+1

'get'は1つの結果しか見つからないと予想しますが、それ以上見つかった場合はエラーをスローし、複数の結果に' filter'を使います! (https://docs.djangoproject.com/en/1.10/ref/models/querysets/#get) – abidibo

答えて

2

ので、複数の結果を返すことができますあなたの検索クエリget()の代わりにfilter()を使用してください。

results = myModel.objects.filter(
    site=query 
) 

は、その後、あなたのテンプレートでは、結果をループ

{% if results %} 
    <ul> 
     {% for result in results %} 
     <li><p>{{ result.url }}</p></li> 
     {% endfor %} 
    </ul> 
{% else %} 
    <p>Nothing Available.</p> 
{% endif %} 
+0

ありがとうございます。単純なもの。 –

関連する問題