jquery - Django,jquery,基于数据库的自动完成,改进
问题描述
大家好,我最近做了一个基于我的数据库的自动完成,问题是我认为它需要一些改进。例如:如果用户两次输入两次相同的值,自动完成也会两次推荐相同的值,还有升级问题我很确定当我的应用程序数据库大小增加时,这段代码可能会不好。会喜欢一些关于如何解决这些问题或一些好的替代方案的想法。这是自动完成视图
@login_required
def AutocompleteModelo(request):
if 'term' in request.GET:
query=DataDB.objects.filter(modelo__istartswith=request.GET.get('term'))
modelos=list()
for q in query:
modelos.append(q.modelo)
return JsonResponse(modelos, safe=False)
return render(request,'data.insiradado.html')
这里是自动完成的 jquery 脚本。
<script>
$(function () {
$("#modelo").autocomplete({
source: '{% url 'data-AutocompleteModelo' %}',
minLength: 1
});
});
</script>
顺便说一句,modelo 是 db 列的名称,感谢您的帮助。
解决方案
我们可以使用distinct
(Django-Docs)从查询集中删除重复的行。
方法values_list
(Django-Docs)返回我们一个元组查询集,然后我们用list()
它来将它转换为列表。
@login_required
def AutocompleteModelo(request):
term = request.GET.get('term')
if term:
modelos = list(DataDB.objects.filter(
modelo__istartswith=request.GET.get('term')
).values_list(
'modelo', flat=True
).order_by("modelo").distinct("modelo"))
return JsonResponse(modelos, safe=False)
return render(request,'data.insiradado.html')
笔记:
仅在PostgreSQL上,您可以传递位置参数 (* fields ) 以指定应应用 DISTINCT 的字段的名称。这将转换为 SELECT DISTINCT ON SQL 查询。这就是区别。对于普通的 distinct() 调用,数据库在确定哪些行是不同的时比较每一行中的每个字段。对于具有指定字段名称的 distinct() 调用,数据库将仅比较指定的字段名称。
推荐阅读
- java - 使用 Maven 构建、ext-impl LoginUtil 类的 liferay 6.2 未加载 Ext 更改
- angular - 子组件未从父组件获取价值
- webpack - chunks.some 不是函数
- .net-core - 将自动化测试结果附加到松弛消息
- javascript - 从数据库中构造具有两次提取的对象不会更新某些字段
- azure-active-directory - AAD B2C多种注册流程
- dataframe - 从 API 循环获取数据框
- powerbi - 计算每个任务类型当前和前一周的比率
- excel - 循环直到到达彩色单元格
- excel - 如何锁定自动填充的单元格