Python 自动完成什么都不做。怎么了?
我有自动完成的代码,它不工作 我有输入字段类坐标,当我键入代码时,它会从我的DB中找到与geo_代码匹配的值,从而找到输入代码所在的国家 因此,当我键入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中,我
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代码与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