Question

J'ai un formulaire pour les informations d'adresse. L'un des champs est pour le pays d'adresse. À l'heure actuelle c'est juste une zone de texte. Je voudrais une liste déroulante baisse (de pays de l'ISO 3166) pour cela. Je suis un django débutant donc je ne l'ai pas encore utilisé un Django Sélectionnez un widget encore. Qu'est-ce qu'une bonne façon de le faire?

Hard code les choix dans un endroit de fichier? Mettez-les dans la base de données? Dans le modèle?

Était-ce utile?

La solution 3

Ended en utilisant l'extrait ci-dessous qui définit essentiellement un tuple de tuples de deux codes de pays de caractère. En outre, il définit un type de champ personnalisé appelé CountryField et par défaut le paramètre de choix au tuple défini ci-dessus. Cela est automatiquement rendu sous la forme d'une liste déroulante.

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

Autres conseils

Django pays

from django_countries.fields import CountryField

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

Django Pays

from django_countries.countries import COUNTRIES

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

Voici une belle bibliothèque avec les pays (et non seulement): pycountry

Son principal avantage est qu'il est un wrapper autour de paquet Debian pkg-isocodes (peut ainsi automatiquement les mises à jour avec elle) par rapport aux pays codées en dur dans d'autres solutions. Il a également des traductions.

Donc, si nouveau apparaît pays ou les pays existants seront fusionnés ensemble, vous n'avez pas besoin de changer votre code.

Je l'ai trouvé utile d'utiliser cette bibliothèque et créer une application simple Django avec le modèle Pays par exemple

Ensuite, vous pouvez remplir et tenir à jour votre table « pays » au moyen de commande django-admin personnalisé comme décrit ici: commandes d'écriture django-admin personnalisée

Comme les réponses précédentes ont déclaré, il y a un CountryField dans django-countries. Ceci est un champ de modèle.

Si un champ de formulaire est nécessaire sous une forme simple (formulaire modèle non), dans django-countries v3.x (certainement testé 3.3) ce qui suit peut être utilisé:

from django_countries.data import COUNTRIES

class MyForm(forms.Form):
    country = forms.ChoiceField(sorted(COUNTRIES.items()))

Mettez dans la base de données est une meilleure façon. Pratique à la gestion.

Lien vers le paquet: django-pays
Si vous cherchez comment le faire dans les formes:

$ pip install django-countries

>>> from django_countries.data import COUNTRIES

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

Voici la solution:

from django_countries.fields import CountryField

class Foo(TimeStampedModel):

    country = CountryField()

Je l'ai résolu en utilisant multiple=True:

from django_countries.fields import CountryField    

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

Vous pouvez en lire davantage dans les docs:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top