Джанго: Страна выпадающий список? - PullRequest
19 голосов
/ 03 июня 2010

У меня есть форма для получения адресной информации. Одно из полей для страны адреса. В настоящее время это просто текстовое поле. Я хотел бы выпадающий список (из ISO 3166 стран) для этого. Я новичок в Django, поэтому я еще даже не использовал виджет Django Select. Какой хороший способ сделать это?

Жесткий код выбора в файле где-нибудь? Положить их в базу данных? В шаблоне?

Ответы [ 11 ]

32 голосов
/ 03 июня 2010

Проверьте параметр " choices " для CharField.

Вы также можете взглянуть на django-стран .

16 голосов
/ 13 сентября 2010

Страны Джанго

from django_countries.fields import CountryField

class Foo(models.Model):
    country = CountryField()
9 голосов
/ 04 июня 2010

Завершается использованием приведенного ниже фрагмента, который в основном определяет кортеж из двухсимвольных кодов стран. Кроме того, он определяет тип настраиваемого поля с именем CountryField и по умолчанию для параметра choices указывается определенный выше кортеж. Это автоматически отображается как выпадающий список.

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

8 голосов
/ 29 августа 2010

Страны Джанго

from django_countries.countries import COUNTRIES

class CountryForm(forms.Form):
      country= forms.ChoiceField(COUNTRIES)
4 голосов
/ 24 ноября 2011

Два проекта с низким содержанием:

http://code.google.com/p/django-countries/

https://github.com/strange/django-country-utils

Два фрагмента:

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

http://djangosnippets.org/snippets/1476/

Пока я собираюсь посмотреть фрагмент.

3 голосов
/ 18 мая 2015

Как указывалось в предыдущих ответах, в django-countries есть CountryField. Это модельное поле.

Если поле формы необходимо в простой форме (не в форме модели), в django-countries v3.x (определенно проверено в 3.3) можно использовать следующее:

from django_countries.data import COUNTRIES

class MyForm(forms.Form):
    country = forms.ChoiceField(sorted(COUNTRIES.items()))
3 голосов
/ 21 января 2014

Вот хорошая библиотека со странами (и не только): pycountry

Его главное преимущество заключается в том, что он является оболочкой для пакетов pkg-isocodes пакета Debian (таким образом, может обновляться автоматически с ним) по сравнению со странами с жестким кодом в других решениях. Также есть переводы.

Таким образом, если появится новая страна или существующие страны будут объединены, вам не нужно менять код.

Я нашел полезным использовать эту библиотеку и создать простое приложение Django с моделью Country, например

Затем вы можете заполнять и обновлять таблицу «страны» с помощью пользовательской команды django-admin, как описано здесь: Написание пользовательских команд django-admin

1 голос
/ 24 января 2019

Ссылка на пакет: Джанго-страны
Если ищите как это сделать в формах:

$ pip install django-countries

>>> from django_countries.data import COUNTRIES

>>> Country = forms.ChoiceField(choices = sorted(COUNTRIES.items()))
1 голос
/ 24 января 2012

Поместить их в базу данных - лучший способ. Удобен в управлении.

0 голосов
/ 20 августа 2018

Я решил это с помощью multiple=True:

from django_countries.fields import CountryField    

class UserProfile(models.Model):
    countries = CountryField(multiple=True)

Подробнее об этом вы можете прочитать в документации:

https://github.com/SmileyChris/django-countries

...