Django数据库查询搜索

时间:2018-11-05 18:44:53

标签: django

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

到目前为止,我还没有获得返回结果的搜索。我的一般问题是,我并没有完全掌握流程,当我在线查看时,要么文档在外壳中显示了其示例,要么在示例中找到了一些读者应该知道的缺少信息的示例(例如,模型,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中的定义匹配。文件。

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 %}

如果有人可以帮助我确定错误,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

search_term = request.GET['sample_search_box']