【问题标题】:django-autocomplete-light displays empty dropdown in the formdjango-autocomplete-light 在表单中显示空下拉列表
【发布时间】:2017-03-27 05:20:07
【问题描述】:

我正在尝试使用 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

在自动完成网址中

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 %} 

所以基本上自动完成功能不起作用。 我应该验证什么才能使其正常工作?

【问题讨论】:

  • 在我看来你忘记了Tenant.objects.none()之后的else声明
  • 我遇到了同样的错误,如果我解决了,我会告诉你的

标签: jquery django django-autocomplete-light


【解决方案1】:

我遇到了同样的问题。这是一个很好的参考: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 中获得结果。

【讨论】:

  • 谢谢乔。我从 url 得到结果。你能告诉我你在哪里调用最终表格吗?
  • 我不明白。您所指的问题中的模板实际上是仅用于自动完成视图的模板,或者这是实际表单的实际模板。?
  • 好吧,我在 forms.py 文件中定义我的表单,然后在我的视图文件中创建。然后要在模板中引用它,您只需编写 '{{.as_p }}'
  • 神秘地它开始起作用了。我认为我在模板中的标签 {{ form.media }} 有问题。谢谢乔,我真的需要一些支持。
  • 赞成,很棒的回应。有同样的问题,添加 {{ form.media }} 完成了这项工作。这在教程中很容易被忽略!
猜你喜欢
  • 2021-06-14
  • 2019-10-01
  • 2016-10-12
  • 2016-03-17
  • 2023-01-24
  • 2022-01-16
  • 2021-10-28
  • 2013-03-24
  • 2021-10-18
相关资源
最近更新 更多