django-autocomplete-light 在表单中显示空下拉列表
django-autocomplete-light displays empty dropdown in the form
我正在尝试使用 django-autocomplete-light
从本教程
https://github.com/yourlabs/django-autocomplete-light/blob/master/docs/tutorial.rst
我用 pip 安装它并将它添加到我的设置文件中
INSTALLED_APPS = (
'dal',
'dal_select2',
我的租户价值
我的租户模型是
class Tenant(CommonInfo):
version = IntegerVersionField( )
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
def __unicode__(self):
return u'%s %s %s ' % ("#", self.id,"first_name", self.first_name, "last_name")
在我的自动完成视图中:
from django.shortcuts import render
from dal import autocomplete
from client.models import Tenant
class TenantAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
# Don't forget to filter out results depending on the visitor !
if not self.request.user.is_authenticated():
return Tenant.objects.none()
qs = Tenant.objects.all()
if self.q:
qs = qs.filter(last_name__istartswith=self.q)
return qs
在自动完成中 url
from django.conf.urls import url, include,patterns
from client import views
urlpatterns = [
url(
r'^tenant-autocomplete/$',
views.TenantAutocomplete.as_view(),
name='tenant-autocomplete',
),
]
形式
class LeaseTenantForm(forms.ModelForm):
tenant = forms.ModelChoiceField(
queryset=LeaseTenant.objects.all(),
widget=autocomplete.ModelSelect2(url='tenant-autocomplete')
)
class Meta:
model = LeaseTenant
exclude = ['lease']
但是在浏览器中呈现后,我看不到输入文本字段,而是空的下拉列表。
在实际视图中
def tenant_new(request,pk,uri):
lease = get_object_or_404(Lease, pk=pk)
title = 'tenant'
uri = _get_redirect_url(request, uri)
if request.method == "POST":
form = LeaseTenantForm(request.POST)
if form.is_valid():
tenant = form.save(commit=False)
tenant.lease = lease
tenant.save()
messages.add_message(request, messages.SUCCESS, str(tenant.id) + "-SUCCESS Object created sucssefully")
return redirect(uri)
else:
form = LeaseTenantForm()
return render(request, 'object_edit.html', {'form': form, 'title': title, 'extend': EXTEND})
我的模板文件
{% block title %}
Add/Edit {{ title }}
{% endblock title %}
{% block content %}
<div class="container">
<div class="row">
<div class="col-md-6 col-sm-12">
<h4>{{ title }}</h4>
<br><div class="center">
<form method="POST" class="form" action="" method="get">
<div class="form-group">
{% csrf_token %}
{{ form|crispy}}
{{ form.media }}
<BR><BR>
<button type="submit" class="btn btn-primary btn-primary">Save</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock content %}
所以自动完成基本上不起作用。
我应该验证什么才能使其正常工作?
我 运行 遇到了同样的问题。这是一个很好的参考:django-autocompletion-light simple foreign key completion shows not editable drop-down widget
确保您在头文件中加载了 jquery 并且您在表单中使用了 {{ form.media }}
标签。
以下是我在头文件中加载 jquery 的方式:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
另外,你有没有尝试去 tenant-autocomplete/
url 看看你是否在那个页面上得到了教程中提到的结果 https://django-autocomplete-light.readthedocs.io/en/master/tutorial.html
如果您无法从 url 中获得结果,那应该是您修复的第一个错误。
我正在尝试使用 django-autocomplete-light 从本教程 https://github.com/yourlabs/django-autocomplete-light/blob/master/docs/tutorial.rst
我用 pip 安装它并将它添加到我的设置文件中
INSTALLED_APPS = (
'dal',
'dal_select2',
我的租户价值
我的租户模型是
class Tenant(CommonInfo):
version = IntegerVersionField( )
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
def __unicode__(self):
return u'%s %s %s ' % ("#", self.id,"first_name", self.first_name, "last_name")
在我的自动完成视图中:
from django.shortcuts import render
from dal import autocomplete
from client.models import Tenant
class TenantAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
# Don't forget to filter out results depending on the visitor !
if not self.request.user.is_authenticated():
return Tenant.objects.none()
qs = Tenant.objects.all()
if self.q:
qs = qs.filter(last_name__istartswith=self.q)
return qs
在自动完成中 url
from django.conf.urls import url, include,patterns
from client import views
urlpatterns = [
url(
r'^tenant-autocomplete/$',
views.TenantAutocomplete.as_view(),
name='tenant-autocomplete',
),
]
形式
class LeaseTenantForm(forms.ModelForm):
tenant = forms.ModelChoiceField(
queryset=LeaseTenant.objects.all(),
widget=autocomplete.ModelSelect2(url='tenant-autocomplete')
)
class Meta:
model = LeaseTenant
exclude = ['lease']
但是在浏览器中呈现后,我看不到输入文本字段,而是空的下拉列表。 在实际视图中
def tenant_new(request,pk,uri):
lease = get_object_or_404(Lease, pk=pk)
title = 'tenant'
uri = _get_redirect_url(request, uri)
if request.method == "POST":
form = LeaseTenantForm(request.POST)
if form.is_valid():
tenant = form.save(commit=False)
tenant.lease = lease
tenant.save()
messages.add_message(request, messages.SUCCESS, str(tenant.id) + "-SUCCESS Object created sucssefully")
return redirect(uri)
else:
form = LeaseTenantForm()
return render(request, 'object_edit.html', {'form': form, 'title': title, 'extend': EXTEND})
我的模板文件
{% block title %}
Add/Edit {{ title }}
{% endblock title %}
{% block content %}
<div class="container">
<div class="row">
<div class="col-md-6 col-sm-12">
<h4>{{ title }}</h4>
<br><div class="center">
<form method="POST" class="form" action="" method="get">
<div class="form-group">
{% csrf_token %}
{{ form|crispy}}
{{ form.media }}
<BR><BR>
<button type="submit" class="btn btn-primary btn-primary">Save</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock content %}
所以自动完成基本上不起作用。 我应该验证什么才能使其正常工作?
我 运行 遇到了同样的问题。这是一个很好的参考:django-autocompletion-light simple foreign key completion shows not editable drop-down widget
确保您在头文件中加载了 jquery 并且您在表单中使用了 {{ form.media }}
标签。
以下是我在头文件中加载 jquery 的方式:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
另外,你有没有尝试去 tenant-autocomplete/
url 看看你是否在那个页面上得到了教程中提到的结果 https://django-autocomplete-light.readthedocs.io/en/master/tutorial.html
如果您无法从 url 中获得结果,那应该是您修复的第一个错误。