【发布时间】:2019-04-27 16:06:36
【问题描述】:
我正在用 django 开发一个项目,是一家电子商务商店。我想实现一个搜索框来搜索上面的产品。
我使用 ajax 进行开发,但目前我正在搜索产品。它向我展示了我拥有的所有产品,而不仅仅是我想要的产品。
这是我对搜索栏的看法:
def searchBar(request, option):
busqueda = request.POST.get('busqueda', '')
categoria = Clasificacion.objects.filter(existencia=True)
items = Articulo.objects.filter(nombre_producto__icontains = busqueda)
contexto = {
'items':items,
'categoria':categoria,
}
return render(request, 'adminview/article.html', contexto)
这是带有调用视图的表单的 html:
<form action="{% url 'adminview:searchBar' option=1 %}" method="get" class="d-none d-sm-inline-block form-inline mr-auto ml-md-0 my-2 my-md-20 navbar-search">
<div class="input-group">
<input type="text" id="busqueda" class="form-control bg-light border-1 small" placeholder="Buscar producto..." aria-label="Search" aria-describedby="basic-addon2" name="busqueda">
<div class="input-group-append">
<button class="btn btn-primary" type="submit">
<img src="{% static 'img/search.png'%}"width="20px" height="20px" />
</button>
</div>
</div>
</form>
...
<script src="{% static 'js/search.js'%}"></script>
我的网址:
url(r'^search/ajax(?P<option>\d+)/$', searchBar, name="searchBar"),
url(r'^buscar/searchAjax/$', searchBar),
如果你需要,这是我的 javaScript 脚本:
$(function(){
$(‘#busqueda’).keyup(function() {
$.ajax({
type: “POST”,
url: “searchAjax/”,
data: {
‘busqueda’: $(‘#busqueda’).val(),
‘csrfmiddlewaretoken’: $(“input[name=csrfmiddlewaretoken]”).val()
},
success: searchSuccess,
dataType: ‘html’
});
});
});
function searchSuccess(data, textStatus, jqXHR)
{
$(‘#resultado_busqueda’).html(data);
}
希望你能帮助我,谢谢!
【问题讨论】:
-
如果您正在取回数据,并且它是正确的数据,但只是没有过滤到正确的子集,那么问题很可能出在您的
searchBar视图中。您可能应该为其编写一些单元测试,以验证添加每个键入的字符后会发生什么。也许想想如果用户输入的速度比你的 ajax 调用快会发生什么? -
我认为数据是正确的,因为如果搜索“lavadora”,我会得到 URL“search/ajax1/?busqueda=Lavadora”。但是如果我写一个单元是一样的。
-
你肯定先得到
127.0.0.1:8000/adminview/search/ajax1/?busqueda=L,然后是127.0.0.1:8000/adminview/search/ajax1/?busqueda=La,然后是127.0.0.1:8000/adminview/search/ajax1/?busqueda=Lav,等等,不是吗? -
当用户按下提交按钮时,它会得到整个单词,如果我写“Lavadora”并按下按钮,我会得到 127.0.0.1:8000/adminview/search/ajax1/?busqueda=拉瓦多拉
-
您在 ajax 中使用 POST 发送数据,但在表单中使用 GET。将表格更改为
method="POST",您应该一切顺利。如果这不起作用,您需要做一些工作来完善您的问题(即删除与您所看到的特定问题无关的所有内容)。