【问题标题】:Django database query searchDjango 数据库查询搜索
【发布时间】:2018-11-05 18:44:53
【问题描述】:

我正在使用 Django(2.1,python 3.6),我想更改我的项目文件以搜索数据库并将结果返回并显示在 HTML 文件中。搜索很简单,它应该查看模型中的一个字段(包含一个单词)。基于其简单性,这不是一个复杂的查找,我认为 Q 对象是多余的。

到目前为止,我还没有得到返回结果的搜索。我的一般问题是我没有完全掌握这个过程,当我在网上查看时,要么文档在 shell 中显示了它的示例,我找到了一些示例,其中存在一些假设读者知道的缺失信息(例如模型、url ,导入的模块,插入代码的文件名),示例已过时,或者我仍然忽略了某些内容。

我对一般过程的理解如下,但根据我如何查看视图,我认为 urls.py 应该在某处:

form (base.html) -> view.py -> query (unknown file) -> results in template (search_results.html)

数据库中肯定有数据,但是当我将查询词放入表单并按submit 时,绝对没有任何反应。这是我的一些代码/文件。

samples/models.py

class Sample(models.Model):
   sample_name = models.CharField('Sample', max_length=16)

samples/templates/base_generic.html

<form name="sample_search_form" method="GET" action="{% url 'search' %}">
     <input  id="sample_search_box" type="text" name="sample_search_box"  placeholder="Search samples..." >
      <button id="sample_search_submit" type="submit" >Submit</button>
</form> 

注意,我尝试使用 sample_search_list 而不是 search 作为 url,但这会在提交时导致错误,我相当肯定这个词应该与 views.py 文件中的定义相匹配。 em>

samples/views.py

def search(request):
    if request.GET:
        search_term = request.GET['term']
        results = Sample.objects.filter(sample_name__icontains=search_term)
        return render_to_response('samples/sample_search_list.html', {'results': results})
    return render_to_response('samples/sample_search_list.html', {})

samples/urls.py

urlpatterns = [ 
   path('', views.index, name='index'),
   path('samples/', views.sam, name='sam'),
   path('sample/<int:pk>', views.SampleDetailView.as_view(), name='sample-detail'),
   path('pi/', views.pi_table, name='pi_table'),
   path('pi/<int:pk>', views.pi_view, name='pi-detail'),
   path('samples/new', views.pi_new, name='pi_new'),
   path('samples/new_sample', views.sample_new, name='sample_new'),
   path('samples/', views.var, name='var'),
   path('samples/', views.search, name='search'),
]

samples/templates/samples/sample_search_list.html

{% if results %}
   {% for result in results %}
      {{ result.sample_name }}
   {% endfor %}
{% else %}
    <h3 class='error'>There was a problem with your input.</h3>
{% endif %}

如果有人能帮我找出错误,我将不胜感激。

【问题讨论】:

  • 为这个应用分享你的 urls.py。
  • @dfundako 问题已更新。
  • 我想通了。名称term 必须替换为输入表单的名称。 search_term = request.GET['sample_search_box']

标签: django


【解决方案1】:

我想通了。名称term 必须替换为输入表单的名称。

search_term = request.GET['sample_search_box']

【讨论】:

    猜你喜欢
    • 2017-04-25
    • 2018-02-21
    • 2021-11-17
    • 2015-03-25
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多