如何使用 django-autocomplete-light

Posted

技术标签:

【中文标题】如何使用 django-autocomplete-light【英文标题】:How to use django-autocomplete-light 【发布时间】:2015-10-15 12:37:28 【问题描述】:

如何使用 django_autcomplete_light 为表单中的一个字段添加自动完成功能。我有一个基于模型的表单,我想将自动完成添加到名字字段。

到目前为止,我已经完成了以下工作:

安装 django_autocomplete_light

更改了 INSTALLED_APPS:

INSTALLED_APPS = (
  'autocomplete_light',
  'django.contrib.admin',
   ...

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

从 django.conf.urls 导入包含,url 从 django.contrib 导入管理员

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")),
]

创建了一个名为 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",
    ,
)

将我的 PersonForm 更改为:

class PersonForm(forms.ModelForm)

到:

class PersonForm(autocomplete_light.ModelForm)

    class Meta:
        model = Person
        autocomplete_fields = ("firstname")

我还在表单的 html 页面中添加了以下行:

% include 'autocomplete_light/static.html' %

我导入了所有必要的 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")),
]

但这并没有解决问题。

【问题讨论】:

【参考方案1】:

根据this教程,我认为你的代码没有意义。 您需要 foreign keymany-to-many 与另一个模型(不仅仅是您的示例中的模型)的关系来自动完成表单字段。 在教程示例中,birth_countryPersonForm 中自动完成,如下所示:

//forms.py

class PersonForm(forms.ModelForm):
class Meta:
    model = Person
    fields = ('__all__')
    widgets = 
        'birth_country': autocomplete.ModelSelect2(url='country-autocomplete')
    

表单代表所有Person 字段并覆盖birth_country 以自动完成。

此外,请告知 dal 插件已经是版本 3,并且与您的代码非常不同。

【讨论】:

我在教程中没有看到任何地方明确指出:“您需要一个外键或与另一个模型的多对多关系(不仅仅是您的示例中的一个)来自动完成表单字段。”【参考方案2】:

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

autocomplete_light.TextWidget("PersonAutocomplete")

例如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"),
        

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

def __unicode__(self):
  return "0 1".format(self.firstname, self.lastname)

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

【讨论】:

这似乎不适用于 dal 3.x。有什么解决办法吗?

以上是关于如何使用 django-autocomplete-light的主要内容,如果未能解决你的问题,请参考以下文章

Django - django-autocomplete-light 设置如何

[精选] Mysql分表与分库如何拆分,如何设计,如何使用

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?