Pregunta

Tengo un formulario para la información de la dirección. Uno de los campos es para el país de direcciones. Actualmente esto es solo un cuadro de texto. Me gustaría una lista desplegable (de 3166 países ISO) para esto. Soy un novato Django, así que ni siquiera he usado un widget Django Select todavía. ¿Cuál es una buena manera de hacer esto?

¿Codificar las opciones en un archivo en algún lugar? ¿Ponlos en la base de datos? En la plantilla?

¿Fue útil?

Solución 3

Terminó usando el fragmento a continuación 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 predeterminado el parámetro de opción a la tupla definida anteriormente. Esto se representa automáticamente como una lista desplegable.

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

Otros consejos

Verificar "opción"Parámetro de un campo.

Es posible que también desee echar un vistazo a cuentas de django.

Países de Django

from django_countries.fields import CountryField

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

Países de Django

from django_countries.countries import COUNTRIES

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

Aquí hay una buena 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 actualizar automáticamente) en comparación con los países codificados en otras soluciones. También tiene traducciones.

Entonces, 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 simple con el país modelo, por ejemplo,

Luego, puede poblar y mantener actualizado su tabla de 'país' mediante el comando personalizado Django-Admin como se describe aquí: Escribir comandos personalizados de Django-Admin

Como han dicho las respuestas anteriores, hay un CountryField en django-countries. Este es un campo modelo.

Si se necesita un campo de formulario en forma simple (no 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()))

Ponlos en la base de datos es una mejor manera. Conveniente para la gerencia.

Enlace al paquete: cuentas de django
Si busca cómo hacerlo en forma:

$ pip install django-countries

>>> from django_countries.data import COUNTRIES

>>> Country = forms.ChoiceField(choices = sorted(COUNTRIES.items()))

Aquí está la solución:

from django_countries.fields import CountryField

class Foo(TimeStampedModel):

    country = CountryField()

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:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top