Python 自动完成什么都不做。怎么了?

Python 自动完成什么都不做。怎么了?,python,mysql,django,django-models,autocomplete,Python,Mysql,Django,Django Models,Autocomplete,我有自动完成的代码,它不工作 我有输入字段类坐标,当我键入代码时,它会从我的DB中找到与geo_代码匹配的值,从而找到输入代码所在的国家 因此,当我键入UK时,它与geo_code匹配,然后将最后一个匹配国家,因此在这种情况下,可以在geo_code中找到UK是代码i类型,而国家是英国。代码是有效的,我想实现的是在键入时自动完成并给出建议。例如: UK United Kingdom USA United States of America 到目前为止我所做的: 在models.py中,我

我有自动完成的代码,它不工作

我有输入字段类坐标,当我键入代码时,它会从我的DB中找到与geo_代码匹配的值,从而找到输入代码所在的国家

因此,当我键入
UK
时,它与
geo_code
匹配,然后将最后一个匹配
国家
,因此在这种情况下,可以在geo_code中找到UK是代码i类型,而国家是英国。代码是有效的,我想实现的是在键入时自动完成并给出建议。例如:

UK   United Kingdom
USA  United States of America
到目前为止我所做的:

models.py中,我有:

class Coordinate(models.Model):
    code = models.CharField(max_length=150)

class Profiles(models.Model):
    geocode=models.CharField(max_length=200)
    country=models.CharField(max_length=500)
    city=models.CharField(max_length=500)

    class Meta:
        managed=False
        db_table='profiles_country'

    def __str__(self):
        return '{}'.format(self.geocode)
表单中.py

from dal import autocomplete

class CoordinateForm(forms.ModelForm):
    code= forms.CharField(max_length=150, label='',widget= forms.TextInput)

    class Meta:
        model = Coordinate
        fields = ('__all__')
        widgets = {
            'code': autocomplete.ModelSelect2(url='coordinate-autocomplete')}
class CoordinateAutocomplete(autocomplete.Select2QuerySetView):
        def get_queryset(self):
            if not self.request.user.is_authenticated():
                return Profiles.objects.none()
            qs = Profiles.objects.all()
            if self.q:
                qs = qs.filter(name__istartswith=self.q)
            return qs
视图中.py

from dal import autocomplete

class CoordinateForm(forms.ModelForm):
    code= forms.CharField(max_length=150, label='',widget= forms.TextInput)

    class Meta:
        model = Coordinate
        fields = ('__all__')
        widgets = {
            'code': autocomplete.ModelSelect2(url='coordinate-autocomplete')}
class CoordinateAutocomplete(autocomplete.Select2QuerySetView):
        def get_queryset(self):
            if not self.request.user.is_authenticated():
                return Profiles.objects.none()
            qs = Profiles.objects.all()
            if self.q:
                qs = qs.filter(name__istartswith=self.q)
            return qs
base.html中

<!DOCTYPE html>
{% load static %}

<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">

    <link rel="stylesheet" href="{% static 'geoproj/css/main.css' %}">

  </head>
  <body>

    <div>{% block content %}{% endblock  %} 

         {% block javascripts %} {% endblock %} </div>

  </body>
</html>

{%load static%}
{%block content%}{%endblock%}
{%block javascripts%}{%endblock%}
geo.html中:

{% extends "base.html" %}
{% block content %}

{% if user.is_authenticated %}
            <form enctype="multipart/form-data" method="POST" >
                    {% csrf_token %}
                    {{ form}}
                    {{form.media }}
            <button class = "btn btn-primary" type="submit">OK</button></form>


{% endif %}

{% endblock content %}

{% block javascripts %} {% endblock %}
{%extends“base.html”%}
{%block content%}
{%if user.u经过身份验证%}
{%csrf_令牌%}
{{form}}
{{form.media}
好啊
{%endif%}
{%endblock内容%}
{%block javascripts%}{%endblock%}

如果你能帮我解决这个案子,我将不胜感激

我没有看到链接URL响应和HTML模板的js。这里我将如何解决它。如果你的观点有效。 您将通过

  • 首先创建一个js事件侦听器,从 形式
  • 一旦获得此文本,您将对视图URL执行ajax调用 你提到
  • 得到ajax结果后,您将为创建一个 循环并为输入生成select标记

  • 这就是我编写js代码与Html模板和Django autocomplete视图URL进行通信的方式。

    协调表单中的字段是CharField,而不是modelcoocefield,因此它无法正确处理autocomplete返回的查询集。

    models.py:

    class Coordinate(models.Model):
        code = models.CharField(max_length=150)
        def __str__(self):
            return self.code
    
    class Profiles(models.Model):
        geocode=models.CharField(max_length=200)
        country=models.CharField(max_length=500)
        city=models.CharField(max_length=500)
    
        class Meta:
            managed=False
            db_table='profiles_country'
    
        def __str__(self):
            return '{}'.format(self.geocode)
    
    views.py:

    def geoview(request):
        if request.method == "POST":
            #do your operations
            return render(request, 'result.html')
    
        return render(request, 'index.html')
    
    
    def getgeocode(request, geocode):
        results = Coordinate.objects.filter(code__istartswith=str(geocode))
        sendres = ""
        for resn in results[:10]:
            sendres += "<option class='bg-primary'>" + resn.code + "</option>"
        return HttpResponse(sendres)
    

    这不是我的问题。我知道什么是静态文件我的问题专门链接到Autocomplete,以及如何与js结合,在我的案例中插入什么代码,因为其他人不适合我。很抱歉,但请更新您的问题以反映确切的代码、视图和模型。不清楚你想说什么。自动完成@GünelOhh的内容好吧,现在我明白了。那么你现在在哪里,你是否像示例中那样将JS放在脚本标记中。之后发生了什么?这有助于你了解情况吗@GünelModelChoiceField提供了下拉菜单——这不是我想要的,为什么不使用javascript呢?据我所知,仅使用django无法做到这一点,因为这是一个前端问题,后端不处理数据,而不向其发送数据。我希望这对你有帮助,保持安全。这不是一件坏事。一个有效的答案是基于我在上面的问题中写的代码。@Günel你想让autocomplete在不使用javasript的情况下使用django表单吗?我现在在手机上,所以无法发送格式良好的代码,但你可以做一些事情。。。在attr of form中添加autocomplete:false,比如:
    attrs={'theme':'bootstrap','autocomplete':'false'}
    这将禁用在浏览器中建议缓存的值。过一段时间后,我将发布一些带有javascript和ajax的代码,我相信这会起作用
    [17/Apr/2020 16:19:52] "GET /coordinate-autocomplete/u HTTP/1.1" 200 120
    [17/Apr/2020 16:20:03] "GET /coordinate-autocomplete/us HTTP/1.1" 200 65
    [17/Apr/2020 16:20:06] "GET /coordinate-autocomplete/u HTTP/1.1" 200 120
    [17/Apr/2020 16:20:13] "GET /coordinate-autocomplete/i HTTP/1.1" 200 44