【问题标题】:Implementing live search using JavaScript and Django使用 JavaScript 和 Django 实现实时搜索
【发布时间】:2021-06-24 00:51:13
【问题描述】:

我正在尝试制作类似于您进行谷歌搜索时的实时搜索功能。搜索按名称查询我数据库中的咖啡馆。

我已经获得了这样的功能,如果整个搜索值与数据库中的咖啡馆名称匹配,它会显示给用户,但我希望这样做,以便在用户键入时检查搜索值,并出现咖啡馆直到用户完成输入(此时应该只剩下一家咖啡馆)。

这是我所拥有的:

$("#search-box").keyup(function() {
  search()  
});
  

function search(){
  let searchTerm = document.getElementById("search-box").value;
      $.ajax({
        type: 'GET',
        url: '/electra/search/',
        data: {
          'search_term':searchTerm
        },
        success: function (data) {
            console.log(searchTerm); //refer to below function for the running of this loop
            $("#search-results").text(data);
          }
        });
  };

views.py:

def search(request):
    template_name = 'testingland/write_image.html'
    search_term = request.GET.get('search_term', None)
    print(search_term)
    qs = mapCafes.objects.filter(cafe_name = search_term)
    return JsonResponse([
            [cafe.cafe_name, cafe.cafe_address]
            for cafe in qs
    ], safe=False)

我一直在使用 qs 过滤器,但无法找到解决此问题的最佳方法。

【问题讨论】:

  • “逐个字母”是什么意思?听起来它不会提供任何有用的搜索结果。你想要mapCafes 实例,其中cafe_name 包含search_term
  • 当用户键入时,我希望咖啡馆出现,直到用户完成键入并且应该只剩下一个咖啡馆。我将更新我的 OP 以使其更清晰。

标签: javascript django django-views


【解决方案1】:

当你写作时:

qs = mapCafes.objects.filter(cafe_name = search_term)

由于您没有指定任何查找,因此假定为exact 查找,即cafe_name 必须与提供的search_term 完全匹配。相反,您希望使用contains [Django-docs]icontains 之类的查找,以便获得包含给定search_term 的所有mapCafes 实例:

qs = mapCafes.objects.filter(cafe_name__icontains = search_term)

注意:按照约定,python 中的类名应为PascalCase。模型名称也应该是 singular 所以它应该是 MapCafe 而不是 mapCafes

【讨论】:

  • 太棒了,工作!和一个很好的解释。我在这里学到了一些新东西,非常感谢。
猜你喜欢
  • 2018-10-04
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 2023-03-17
  • 2018-12-11
相关资源
最近更新 更多