带有自动完成功能的简单 Django 表单
Posted
技术标签:
【中文标题】带有自动完成功能的简单 Django 表单【英文标题】:Simple Django form with autocomplete 【发布时间】:2014-09-15 17:12:45 【问题描述】:有没有关于如何在 Django 表单中使用自动完成的简单示例:
forms.py
class SimpleForm(forms.form):
a = forms.ModelChoiceField(Model.objects)
template
form action="" method="post">% csrf_token %
simple_form
我需要一个字段来自动完成。我找到了this,但这是一个模型形式而不是普通形式。 任何建议。
【问题讨论】:
【参考方案1】:这是我用于 Django 3.2 的代码:
from django.http import JsonResponse
def my_autocomplete(request):
"""Return a json list of suggestions given a prefix in 'term' param"""
term = request.GET.get('term', None)
qs = MyObject.objects.all()
if term:
qs = qs.filter(field__istartswith=term)
# NOTE: This order is non-deterministic if there are more than 5
# objects with the same 'order'. I'm assuming that's okay.
qs = qs.order_by('order')[:5]
results = [r.field for r in qs]
# NOTE: results is put into json. safe=False allows an array.
return JsonResponse(results, safe=False)
【讨论】:
【参考方案2】:Jquery autocomplete 与 django 非常容易集成。您只需要创建一个函数,该函数会在您的查询中返回一个 json。例如:
def automcomplete(request):
search_qs = YourObject.objects.filter(title__icontains=request.REQUEST['search'])[:5]
results = []
for r in search_qs:
results.append(r.title)
resp = request.REQUEST['callback'] + '(' +simplejson.dumps(results) + ');'
return HttpResponse(resp,content_type='application/json')
【讨论】:
以上是关于带有自动完成功能的简单 Django 表单的主要内容,如果未能解决你的问题,请参考以下文章