example - drop down list django
Django: ¿lista desplegable de países? (11)
Tengo un formulario de información de dirección. Uno de los campos es para la dirección del país. Actualmente esto es solo un cuadro de texto. Me gustaría una lista desplegable (de países ISO 3166) para esto. Soy un novato de Django, así que ni siquiera he usado un widget de Django Select. ¿Cuál es una buena manera de hacer esto?
¿Codificar las opciones en un archivo en algún lugar? ¿Ponerlos en la base de datos? En la plantilla?
Aquí está la solución:
from django_countries.fields import CountryField
class Foo(TimeStampedModel):
country = CountryField()
Aquí hay una bonita biblioteca con países (y no solo): pycountry
Su principal ventaja es que es un envoltorio alrededor del paquete Debian pkg-isocodes (por lo tanto, puede actualizarse automáticamente con él) en comparación con los países codificados en otras soluciones. También tiene traducciones.
Por lo tanto, si aparece un nuevo país o los países existentes se fusionarán, no necesita cambiar su código.
Me pareció útil usar esta biblioteca y crear una aplicación Django sencilla con el modelo País, por ejemplo
Luego, puede completar y actualizar su tabla de "país" mediante el comando personalizado django-admin como se describe aquí: Escribir comandos personalizados django-admin
Como las respuestas anteriores han indicado, hay un CountryField
en django-countries
. Este es un campo modelo.
Si se necesita un campo de formulario en forma simple (no en forma de modelo), en django-countries
v3.x (definitivamente probado en 3.3) se puede usar lo siguiente:
from django_countries.data import COUNTRIES
class MyForm(forms.Form):
country = forms.ChoiceField(sorted(COUNTRIES.items()))
Dos proyectos de bajo mantenimiento:
http://code.google.com/p/django-countries/
https://github.com/strange/django-country-utils
Dos fragmentos:
http://djangosnippets.org/snippets/494/
djangosnippets.org/snippets/1476
Por ahora, voy por un fragmento.
Echa un vistazo a " choices " parámetro de un CharField.
También es posible que desee echar un vistazo a django-countries .
Enlace al paquete: django-countries
Si buscas cómo hacerlo en formas:
$ pip install django-countries
>>> from django_countries.data import COUNTRIES
>>> Country = forms.ChoiceField(choices = sorted(COUNTRIES.items()))
Lo resolví usando multiple=True
:
from django_countries.fields import CountryField
class UserProfile(models.Model):
countries = CountryField(multiple=True)
Puedes leer más sobre esto en los documentos:
Países Django
from django_countries.countries import COUNTRIES
class CountryForm(forms.Form):
country= forms.ChoiceField(COUNTRIES)
Ponerlos en la base de datos es una mejor manera. Conveniente para la gestión.
Terminé usando el siguiente fragmento que básicamente define una tupla de tuplas de códigos de país de dos caracteres. Además, define un tipo de campo personalizado llamado CountryField y configura de manera predeterminada el parámetro de opciones para la tupla definida anteriormente. Esto se procesa automáticamente como una lista desplegable.
from django_countries.fields import CountryField
class Foo(models.Model):
country = CountryField()