簡體   English   中英

如何使用django-autocomplete-light

[英]How to use django-autocomplete-light

如何使用django_autcomplete_light將自動填充添加到表單中的一個字段。 我有一個基於模型的表單,我想在firstname字段中添加自動完成功能。

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

安裝django_autocomplete_light

更改了INSTALLED_APPS:

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

將它添加到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")),
]

創建了一個名為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")),
]

但這並沒有解決問題。

如果使用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__函數中返回的__str__ 在我的示例中,我的Persons類具有以下__unicode__方法:

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

因此,正在自動完成的文本字段中顯示的內容將是該人員的全名,而不僅僅是名字,如果您選擇一個,則在該字段中輸入全名。

根據教程,我認為您的代碼沒有意義。 您需要與另一個模型(不僅僅是示例中的一個)的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中,並且與您的代碼非常不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM