2016-09-23 77 views
0

我遇到了搜索表單問題。我正在嘗試創建一個查詢數據庫並在結果頁上返回結果的搜索字段。我有返回1結果與一個特定的查詢和另一個查詢與多個行我得到這個錯誤get()返回多個MyModel - 它返回791!。由於我是Django Forms新手,這看起來很愚蠢。如果您需要其他信息,請告訴我。我曾嘗試使用.filter,但不會返回任何內容。我已經看過多個SO問題,有些已經幫助過,但仍然有一些小問題。我的代碼如下:Django - get()返回多個返回700

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'只希望找到一個結果,如果發現更多,則會拋出錯誤,使用'filter'獲得多個結果! (https://docs.djangoproject.com/en/1.10/ref/models/querysets/#get) – abidibo

回答

2

你的搜索查詢可以返回多個結果,所以您應該使用filter()而不是get()

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

非常感謝!簡單一點。 –