Джанго: раскрывающийся список страны?
-
23-10-2019 - |
Вопрос
У меня есть форма для информации о адресах. Одна из полей для страны адреса. В настоящее время это всего лишь текстовое поле. Я хотел бы раскрывать список (из стран ISO 3166) для этого. Я новичок в Django, поэтому я еще даже не использовал виджет Django Select. Как это хороший способ сделать это?
Жесткий код выбора в файле где-нибудь? Поместите их в базу данных? В шаблоне?
Решение 3
В итоге использовал приведенный ниже фрагмент, который в основном определяет кортеж с корпусами двух кодов страны. Кроме того, он определяет пользовательский тип поля под названием Countryfield и по умолчанию параметр выбора в вышеуказанный кортеж. Это автоматически отображается в виде выпадающего списка.
Другие советы
Проверить "Выбор"Параметр Чарфилда.
Вы также можете взглянуть на Django-Countries.
from django_countries.fields import CountryField
class Foo(models.Model):
country = CountryField()
Страны Джанго
from django_countries.countries import COUNTRIES
class CountryForm(forms.Form):
country= forms.ChoiceField(COUNTRIES)
Два проекта с низкой командой:
http://code.google.com/p/django-countries/
https://github.com/strange/django-country-utils
Два фрагмента:
http://djangosnippets.org/snippets/494/
http://djangosnippets.org/snippets/1476/
Пока я собираюсь на фрагмент.
Вот хорошая библиотека со странами (и не только): Пикунтри
Его основное преимущество заключается в том, что это обертка вокруг Debian Package Pkg-азокоды (таким образом, может автоматически обновляться с ним) по сравнению со странами с твердыми кодировками в других решениях. У этого также есть переводы.
Поэтому, если появится новая страна или существующие страны будут объединены вместе, вам не нужно менять свой код.
Я нашел, что было бы полезно использовать эту библиотеку и создать простое приложение Django с модельной страной, например,
Затем вы можете заполнить и быть в курсе таблицы своей «страны» с помощью пользовательской команды django-admin, как описано здесь: Написание пользовательских команд django-admin
Как говорили предыдущие ответы, есть CountryField
в django-countries
. Анкет Это поле модели.
Если поле формы необходимо в простой форме (не модели), в django-countries
v3.x (определенно тестируется в 3.3) Можно использовать следующее:
from django_countries.data import COUNTRIES
class MyForm(forms.Form):
country = forms.ChoiceField(sorted(COUNTRIES.items()))
Поместите их в базу данных - лучший способ. Удобно для управления.
Ссылка на пакет: Django-Countries
Если искать, как это сделать в формах:
$ pip install django-countries
>>> from django_countries.data import COUNTRIES
>>> Country = forms.ChoiceField(choices = sorted(COUNTRIES.items()))
Вот решение:
from django_countries.fields import CountryField
class Foo(TimeStampedModel):
country = CountryField()
Я решил это, используя multiple=True
:
from django_countries.fields import CountryField
class UserProfile(models.Model):
countries = CountryField(multiple=True)
Вы можете прочитать больше об этом в документах: