【问题标题】:Django - get() returned more than one it returned 700Django - get() 返回多个它返回 700
【发布时间】:2016-09-23 13:05:34
【问题描述】:

我的搜索表单有问题。我正在尝试创建一个搜索字段来查询数据库并在我的结果页面上返回结果。我的页面返回 1 个带有某个查询的结果,另一个带有多行的查询我收到此错误 get() 返回了多个 MyModel -- 它返回了 791!。这可能看起来很愚蠢,因为我是 Django Forms 的新手。如果您需要任何其他信息,请告诉我。我曾尝试使用 .filter 但没有返回任何内容。我查看了多个 SO 问题,其中一些问题有所帮助,但仍有一点问题。我的代码如下:

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)

结果.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>

【问题讨论】:

  • 您的 SQL 查询有什么意义?你执行它,忽略结果,然后对 Django 模型调用做同样的事情。
  • @DanielRoseman 我打算把它拿出来让我编辑它。
  • get 期望只找到一个结果,如果找到更多则抛出错误,使用filter 获得多个结果! (docs.djangoproject.com/en/1.10/ref/models/querysets/#get)

标签: django python-2.7 django-views


【解决方案1】:

您的搜索查询可以返回多个结果,因此您应该使用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 %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2021-08-02
    • 2022-06-21
    • 2022-08-24
    • 2014-03-30
    • 2016-08-13
    相关资源
    最近更新 更多