【问题标题】:django rest api for advance search用于高级搜索的 django rest api
【发布时间】:2018-04-03 02:49:47
【问题描述】:

我想使用 django rest 框架创建一个 api,它会做一些高级搜索,比如 杂货清单保存在数据库中,用户想要创建一个杂货清单,他输入前 2 或 3 个字母然后我的 api 将进行查询以获取项目名称的其余部分并向用户建议

我已经看过drf haystack 的文档,但不确定它是否能满足我的要求。它也不支持 django LTS 1.11 版。

你能给我一些建议吗? django rest 框架本身是否提供任何支持来创建这样的 api,它将执行我上面提到的such advance search?我只是需要一些建议,因为我是 django rest 框架的新手。

【问题讨论】:

  • 请看答案

标签: python django rest django-rest-framework


【解决方案1】:

如果您想搜索带有建议的搜索,您可以使用 jquery 自动完成输入并将其链接到生成杂货的视图,而无需使用 rest-framework 来完成这个简单的任务。

html代码:

<script>
$(function() {
   $("#your_input_id").autocomplete({
   source: "{% url 'url_name' %}",
   minLength: 2,
});
});

</script>

让我们创建视图:

import json # or simplejson
def get_grocery(request):
    if request.is_ajax():
        q = request.GET.get('term', '')
        places = Grocery.objects.filter(grocery_name__icontains=q)
        results = []
        for pl in places:
            place_json = {}
            place_json['id'] = pl.id
            place_json['label'] = pl.grocery_name
            place_json['value'] = pl.grocery_name
            results.append(place_json)
        data = json.dumps(results)
    else:
        data = 'fail'
    mimetype = 'application/json'
    return HttpResponse(data, mimetype)

最后确定网址:

url(r'^api/get_grocery/', views.get_grocery, name='url_name'),

别忘了导入 jquery

<!-- jQuery !-->
<link rel="stylesheet" href="http://code.jquery.com/ui/1.8.18/themes/base/jquery-ui.css" type="text/css" media="all" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript">
</script> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js" type="text/javascript"></script>

【讨论】:

  • @感谢您的努力,但不幸的是它不能满足我的要求。我希望使用django rest framework 来完成。
  • 好的,只需将我的视图替换为从杂货店生成 json 列表的 rest-framework,但输入和 jquery-autocomplete 将为您工作
  • 是的,您回答的另一个问题是您正在使用icontains 进行过滤,这也不能满足我的要求,我问,从客户端,客户将请求 2 或 3 个字母杂货项目名称,然后 api 将建议他最可能的杂货项目名称。 icontains 不会达到目的,对吧?你怎么看,如果我使用弹性搜索,做这样的搜索会是个好主意吗?
  • 不,该视图仅用于生成列表,但用户类型 2 或三个字符在 jquery minLength: 2, 所以请尝试我的代码你不会丢失任何事情
猜你喜欢
  • 2016-05-01
  • 2015-04-06
  • 1970-01-01
  • 2021-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多