如何使用django-autocomplete-light

abd*_*003 5 python django jquery autocomplete django-autocomplete-light

如何使用django_autcomplete_light将自动填充添加到表单中的一个字段.我有一个基于模型的表单,我想在firstname字段中添加自动完成功能.

到目前为止我做了以下事情:

安装django_autocomplete_light

更改了INSTALLED_APPS:

INSTALLED_APPS = (
  'autocomplete_light',
  'django.contrib.admin',
   ...
Run Code Online (Sandbox Code Playgroud)

将它添加到urls.py,这是我的urls.py:

来自django.conf.urls的import include,来自django.contrib的url导入管理员

urlpatterns = [
    url(r"^admin/", include(admin.site.urls)),
    url(r"^app/", include("app.urls")),
    url(r"^autocomplete/", include("autocomplete_light.urls")),
    url(r"^.*$", include("app.urls")),
]
Run Code Online (Sandbox Code Playgroud)

创建了一个名为autocomplete_light_registry.py的文件,并添加了以下内容:

import autocomplete_light as al
from .models import *

al.register(Person,
    search_fields = ["^firstname"],
    attrs={
        "placeholder":"First name",
        "data-autocomplete-minimum-characters":1,
    },
    widget_attrs={
        "data-widget-maximum-values":4,
        "class":"modern-style",
    },
)
Run Code Online (Sandbox Code Playgroud)

改变了我的PersonForm:

class PersonForm(forms.ModelForm)
Run Code Online (Sandbox Code Playgroud)

至:

class PersonForm(autocomplete_light.ModelForm)

    class Meta:
        model = Person
        autocomplete_fields = ("firstname")
Run Code Online (Sandbox Code Playgroud)

我还将以下行添加到表单的html页面:

{% include 'autocomplete_light/static.html' %}
Run Code Online (Sandbox Code Playgroud)

我导入了所有必要的jquery文件

但是自动完成功能不会出现.我没有得到任何错误.我按照文档教程.

我正在使用python manage.py runserver运行该应用程序.

编辑:

我将urlpatterns更改为(首先制作了django-autocomplete-light url):

urlpatterns = [
    url(r"^autocomplete/", include("autocomplete_light.urls")),
    url(r"^admin/", include(admin.site.urls)),
    url(r"^app/", include("app.urls")),
    url(r"^.*$", include("app.urls")),
]
Run Code Online (Sandbox Code Playgroud)

但这并没有解决问题.

abd*_*003 4

django-autocomplete-light如果您使用搜索,则必须做一些不同的事情models.CharField。在 form.py 中,您需要将以下小部件添加到要添加自动完成功能的字段中:

autocomplete_light.TextWidget("PersonAutocomplete")
Run Code Online (Sandbox Code Playgroud)

例如forms.py:

from django import forms
import autocomplete_light
from .models import *

class PersonForm(forms.ModelForm):
    """
    This form is to create new RTN's.  It does not include lastupdateddate and
    lastupdatedby, because these will be automatically filled out.
    """
    class Meta:
        model = Rtn
        autocomplete_fields = ("firstname")
        fields = ["firstname", "lastname", "age"]
        widgets = {
           "firstname":autocomplete_light.TextWidget("PersonAutocomplete"),
        }
Run Code Online (Sandbox Code Playgroud)

您应该注意,自动完成中显示的内容将是您在模型类的__str__或函数中返回的内容。__unicode__在我的示例中,我的 Persons 类具有以下__unicode__方法:

def __unicode__(self):
  return "{0} {1}".format(self.firstname, self.lastname)
Run Code Online (Sandbox Code Playgroud)

因此,自动完成的文本字段中显示的将是该人的全名,而不仅仅是名字,如果您选择一个,则全名将输入到该字段中。

  • 这似乎不适用于 dal 3.x。有什么解决方法吗? (2认同)