Django JQuery自动完成

Django JQuery自动完成,jquery,python,json,django,autocomplete,Jquery,Python,Json,Django,Autocomplete,我正在尝试向表单中添加自动完成字段。但是我不能上班。我几乎试过所有的教程。 请求发出的很好,我收到了200的回复。在“开发人员工具”窗格中,单击请求时,在“响应”选项卡上可以看到整个HTML文件。难道不应该有json格式的东西吗。。?? 代码如下: models.py class Signers(models.Model): uid = models.IntegerField(primary_key=True) firstName = models.CharField(max_l

我正在尝试向表单中添加自动完成字段。但是我不能上班。我几乎试过所有的教程。 请求发出的很好,我收到了200的回复。在“开发人员工具”窗格中,单击请求时,在“响应”选项卡上可以看到整个HTML文件。难道不应该有json格式的东西吗。。?? 代码如下:

models.py

class Signers(models.Model):
    uid = models.IntegerField(primary_key=True)
    firstName = models.CharField(max_length=255)
    lastName = models.CharField(max_length=255)
views.py

def get_signers(request):
  if request.is_ajax():
    q = request.GET.get('term', '')
    signers = Signers.objects.filter(uid__icontains=q)[:20]
    results = []
    for s in signers:
      signer_json = {}
      signer_json['id'] = s.uid
      signer_json['label'] = s.uid
      signer_json['value'] = s.uid
      results.append(signer_json)
    data = json.dumps(results)
    print data
  else:
    data = 'fail'
  mimetype = 'application/json'
  return HttpResponse(data,mimetype)
url.py

url(r'^get_signers/', views.get_signers, name='get_signers'),
praxis.html(我的模板)


$(函数(){
$(“#id_signerIds”).autocomplete({
资料来源:“获取签名者/”,
最小长度:2,
});
});
$(文档).ready(函数(){
$('#id_submissionTimestamp').hide();
$('id_issueDate').hide();
});
{%endblock页\头%}
{%block content%}
{%csrf_令牌%}
签署人:
拯救
{%endblock%}

首先,当您使用Django时,我建议您按名称键入url,就像这样,如果您更改视图的url,您将不需要在注释中的任何地方都更改它,因此您可以执行
操作,而不是
源代码:“get_signers/”,

现在回到问题,我建议您将代码更改为:

signers = Signers.objects.filter(uid__icontains=q)[:20]
results = []
for signer in signers:
    signer_json = signer.name
    results.append(signer_json)
为了提供我的工作案例,我将向您提供我的代码:

视图.py

def company_autocomplete(request):
    if request.is_ajax():
        query = request.GET.get("term", "")
        companies = Company.objects.filter(name__icontains=query)
        results = []
        for company in companies:
            place_json = company.name
            results.append(place_json)
        data = json.dumps(results)
    mimetype = "application/json"
    return HttpResponse(data, mimetype)
url(r'^api/company-autocomplete/', company_autocomplete, name='company-autocomplete'),
url.py

def company_autocomplete(request):
    if request.is_ajax():
        query = request.GET.get("term", "")
        companies = Company.objects.filter(name__icontains=query)
        results = []
        for company in companies:
            place_json = company.name
            results.append(place_json)
        data = json.dumps(results)
    mimetype = "application/json"
    return HttpResponse(data, mimetype)
url(r'^api/company-autocomplete/', company_autocomplete, name='company-autocomplete'),
add_company.html

...
<div class="form-group bmd-form-group">
  <label class="bmd-label-static" 
         for="company_autocomplete_input">Cerca azienda</label>
  <input id="company_autocomplete_input" class="form-control"
         placeholder="Nome azienda" style="width:500px">
</div>
... 
<button class="btn btn-raised btn-primary" type="submit"
        style="background-color:#1A88B9;">Aggiungi</button>
<script>
  $(function() {
    $("#company_autocomplete_input").autocomplete({
      source: "{% url 'company-autocomplete' %}",
      minLength: 1,
    });
  });
</script>
...
。。。
阿齐恩达鹿
... 
阿吉翁吉
$(函数(){
$(“#公司_自动完成_输入”)。自动完成({
来源:“{%url'公司自动完成“%”,
最小长度:1,
});
});
...
最重要的是: 确保在自动完成输入之前添加jQuery

<!-- jQuery !-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"> </script>
<!-- jQuery UI !-->
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>


“但我无法工作”什么东西不工作?@PacoH。当我键入一些数字时,输入字段下方不会显示任何结果,就像我应该看到的那样。尝试如果它不起作用,请包括请求对
get\u signers/
的响应。如果您有多个问题,我认为您希望进行ajax调用,但您没有初始化它。我建议将
source:“get\u signers/”,
中的“get\u singers”更改为一个变量,并像
source:“{{get\u singers}}”
那样传递它。如果您真的想进行ajax调用(更好的解决方案,但更难),则必须在用户点击某个键时触发,将键入的键发送到您的视图并发送回一些数据。我不确定您是否可以使用名称URL作为jquery的源。因为这是在JQ中,而不是在模板中,jquery不知道{%url….%}是什么意思。所以它会这样做:/currenturl/{%url….%}?term=。。。。