Django: выпадающий список страны?
У меня есть форма для адресной информации. Одно из полей предназначено для адресной страны. В настоящее время это всего лишь текстовое поле. Для этого мне нужен выпадающий список (из стран ISO 3166). Я новичок django, поэтому я еще не использовал виджет Django Select. Каков хороший способ сделать это?
Жесткий код выбора в файле где-нибудь? Поместить их в базу данных? В шаблоне?
Ответы
Ответ 1
Закончено с использованием нижеприведенного фрагмента, который в основном определяет кортеж двух кодов стран символов. Кроме того, он определяет настраиваемый тип поля, называемый CountryField, и по умолчанию задает параметр выбора для указанного выше кортежа. Это автоматически отображается как выпадающий список.
http://djangosnippets.org/snippets/494/
Ответ 2
Отметьте choices" параметр CharField.
Вы также можете взглянуть на django-countries.
Ответ 3
Страны Джанго
from django_countries.fields import CountryField
class Foo(models.Model):
country = CountryField()
Ответ 4
Страны Django
from django_countries.countries import COUNTRIES
class CountryForm(forms.Form):
country= forms.ChoiceField(COUNTRIES)
Ответ 5
проверить это, вот список всех стран, основанный на ISO 3166, запрограммированном на python, и использование опции выбора в модели django.
Ответ 6
Два невысоких проекта:
http://code.google.com/p/django-countries/
https://github.com/strange/django-country-utils
Два фрагмента:
http://djangosnippets.org/snippets/494/
http://djangosnippets.org/snippets/1476/
Пока что я собираюсь сделать сниппет.
Ответ 7
Вот хорошая библиотека со странами (и не только): pycountry
Его главное преимущество заключается в том, что это оболочка пакета pkg-isocodes Debian (таким образом, он может автоматически обновляться вместе с ним) по сравнению с жестко закодированными странами в других решениях. Он также имеет переводы.
Итак, если появится новая страна или существующие страны будут объединены вместе, вам не нужно будет менять свой код.
Мне было удобно использовать эту библиотеку и создать простое приложение Django с моделью Country, например
Затем вы можете заполнить и обновить свою таблицу "country" с помощью пользовательской команды django-admin, как описано здесь: Написание пользовательских django- команды администратора
Ответ 8
Как указывали предыдущие ответы, в 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()))
Ответ 9
Поместить их в базу данных - лучший способ. Удобно для управления.
Ответ 10
Ссылка на пакет: django-страны
Если вы ищете, как это сделать в формах:
$ pip install django-countries
>>> from django_countries.data import COUNTRIES
>>> Country = forms.ChoiceField(choices = sorted(COUNTRIES.items()))
Ответ 11
Вот решение:
from django_countries.fields import CountryField
class Foo(TimeStampedModel):
country = CountryField()
Ответ 12
Я решил это, используя multiple=True
:
from django_countries.fields import CountryField
class UserProfile(models.Model):
countries = CountryField(multiple=True)
Вы можете прочитать больше об этом в документации:
https://github.com/SmileyChris/django-countries