2010-06-03 483 views
17

我有一個地址信息的表單。其中一個字段是針對地址所在的國家/地區。目前這只是一個文本框。我想爲此列出一個(ISO 3166國家的)下拉列表。我是一個django新手,所以我還沒有使用Django Select小部件。什麼是這樣做的好方法?Django:國家下拉列表?

對某處文件中的選項進行硬編碼?把它們放在數據庫中?在模板中?

回答

9

結束使用下面的片段,它基本上定義了兩個字符國家代碼的元組的元組。此外,它定義了一個名爲CountryField的自定義字段類型,並將選項參數默認爲上面定義的元組。這會自動呈現爲下拉列表。

http://djangosnippets.org/snippets/494/

+1

django-countries提供的完全一樣。它是一個可重用的組件。 – 2010-08-11 13:50:10

+1

有人在djangosnippets的評論建議使用此代碼片段:http://djangosnippets.org/snippets/1476/它是更新的並修復'maxlength'錯誤。 – 2011-07-06 14:53:38

28

查看CharField的「choices」參數。你可能還想看看django-countries

+6

1 Django的國家 – 2010-08-11 13:47:14

+1

注有兩個Django國家項目。鏈接的數據有更全面的數據,但似乎沒有得到積極維護,因此請留意過時的數據。 – Marcin 2011-11-22 16:14:50

+1

似乎現在生活在github上:https://github.com/SmileyChris/django-countries/ – creimers 2015-09-26 09:48:27

4

檢查this,這裏列出了所有國家的基於ISO 3166編程的python,並在django模型中使用選項選項。

+2

當我寫,該頁面沒有數據。 – Marcin 2011-11-22 16:21:50

8

Django的國家

from django_countries.countries import COUNTRIES 

class CountryForm(forms.Form): 
     country= forms.ChoiceField(COUNTRIES) 
+1

django-countries現在有一個CountryField類。 – aehlke 2010-09-13 12:19:11

+0

cool with CountryField – Asinox 2010-09-14 04:50:29

+2

嗨..有一個問題,當這個表格被渲染時,通過默認顯示「阿富汗」,這是第一個國家在選擇套餐..但如果國家領域不需要呢?意思是,默認顯示----或類似的 – Mona 2013-07-05 08:46:34

11

Django Countries

from django_countries.fields import CountryField 

class Foo(models.Model): 
    country = CountryField() 
+1

偉大的項目嘗試這一個 – soField 2010-09-24 20:14:55

+1

請注意,這隻提供2個字符的代碼。 – Marcin 2011-11-22 16:16:20

+0

@monokrome所以你說的是我是對的,你需要做額外的工作來代表任何其他格式的國名。 – Marcin 2012-07-10 19:07:02

1

把它們放在數據庫中是一種更好的方法。方便管理。

3

這裏是一個不錯的庫的國家(不僅是和):pycountry

它的主要優點是,它比大約是Debian的包pkg-isocodes包裝(因此可以用它自動更新)硬編碼其他國家的解決方案。它也有翻譯。

因此,如果出現新國家或現有國家將合併在一起,您不需要更改您的代碼。

我認爲應該使用這個庫,並創建模範國家一個簡單的Django應用程序例如

然後你可以填充和跟上最新的「國家」表通過定製Django的管理手段這裏描述的命令:Writing custom django-admin commands

0

這裏是解決方案:

from django_countries.fields import CountryField 

class Foo(TimeStampedModel): 

    country = CountryField() 
1

由於以前的答案已經提到過,在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())) 
+1

這在用django-countries創建表單時很有用。謝謝 ! – ni8mr 2017-05-15 06:52:17