我有一個地址信息的表單。其中一個字段是針對地址所在的國家/地區。目前這只是一個文本框。我想爲此列出一個(ISO 3166國家的)下拉列表。我是一個django新手,所以我還沒有使用Django Select小部件。什麼是這樣做的好方法?Django:國家下拉列表?
對某處文件中的選項進行硬編碼?把它們放在數據庫中?在模板中?
我有一個地址信息的表單。其中一個字段是針對地址所在的國家/地區。目前這只是一個文本框。我想爲此列出一個(ISO 3166國家的)下拉列表。我是一個django新手,所以我還沒有使用Django Select小部件。什麼是這樣做的好方法?Django:國家下拉列表?
對某處文件中的選項進行硬編碼?把它們放在數據庫中?在模板中?
結束使用下面的片段,它基本上定義了兩個字符國家代碼的元組的元組。此外,它定義了一個名爲CountryField的自定義字段類型,並將選項參數默認爲上面定義的元組。這會自動呈現爲下拉列表。
查看CharField的「choices」參數。你可能還想看看django-countries。
Django的國家
from django_countries.countries import COUNTRIES
class CountryForm(forms.Form):
country= forms.ChoiceField(COUNTRIES)
from django_countries.fields import CountryField
class Foo(models.Model):
country = CountryField()
把它們放在數據庫中是一種更好的方法。方便管理。
這裏是一個不錯的庫的國家(不僅是和):pycountry
它的主要優點是,它比大約是Debian的包pkg-isocodes包裝(因此可以用它自動更新)硬編碼其他國家的解決方案。它也有翻譯。
因此,如果出現新國家或現有國家將合併在一起,您不需要更改您的代碼。
我認爲應該使用這個庫,並創建模範國家一個簡單的Django應用程序例如
然後你可以填充和跟上最新的「國家」表通過定製Django的管理手段這裏描述的命令:Writing custom django-admin commands
這裏是解決方案:
from django_countries.fields import CountryField
class Foo(TimeStampedModel):
country = CountryField()
由於以前的答案已經提到過,在django-countries
一個CountryField
。這是一個模型領域。
如果需要在一個普通的形式(未模型形式)表單域,在django-countries
3.x版(在3.3絕對測試)以下,可以使用:
from django_countries.data import COUNTRIES
class MyForm(forms.Form):
country = forms.ChoiceField(sorted(COUNTRIES.items()))
這在用django-countries創建表單時很有用。謝謝 ! – ni8mr 2017-05-15 06:52:17
django-countries提供的完全一樣。它是一個可重用的組件。 – 2010-08-11 13:50:10
有人在djangosnippets的評論建議使用此代碼片段:http://djangosnippets.org/snippets/1476/它是更新的並修復'maxlength'錯誤。 – 2011-07-06 14:53:38