web-dev-qa-db-fra.com

Django: Liste déroulante des pays?

J'ai un formulaire pour l'adresse. L'un des champs est pour le pays de l'adresse. Actuellement, il ne s'agit que d'une zone de texte. Je voudrais une liste déroulante (des pays ISO 3166) pour cela. Je suis un débutant à Django, je n'ai donc même pas encore utilisé de widget Django Select. Quel est un bon moyen de faire cela?

Coder en dur les choix dans un fichier quelque part? Les mettre dans la base de données? Dans le modèle?

19
User

Nous avons fini par utiliser l'extrait ci-dessous, qui définit fondamentalement un nuplet de nuplets de codes de pays à deux caractères. De plus, il définit un type de champ personnalisé appelé CountryField et attribue par défaut le paramètre choice au tuple défini ci-dessus. Ceci est automatiquement rendu sous forme de liste déroulante.

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

9
User

Consultez le paramètre " choices " d'un CharField.

Vous voudrez peut-être aussi jeter un oeil à Django-countries .

32

Pays Django

from Django_countries.fields import CountryField

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

Pays Django

from Django_countries.countries import COUNTRIES

class CountryForm(forms.Form):
      country= forms.ChoiceField(COUNTRIES)
8
Asinox
4
toto_tico

Voici une bibliothèque de Nice avec les pays (et pas seulement): pycountry

Son principal avantage est qu’il encapsule le paquet Debian pkg-isocodes (permet donc de le mettre à jour automatiquement) par rapport aux pays codés en dur dans d’autres solutions. Il a aussi des traductions.

Ainsi, si un nouveau pays apparaît ou si des pays existants sont fusionnés, vous n'avez pas besoin de changer votre code.

J'ai trouvé utile d'utiliser cette bibliothèque et de créer une application Django simple avec le modèle Country par exemple

Vous pouvez ensuite renseigner et tenir à jour votre table 'pays' à l'aide de la commande personnalisée Django-admin, comme décrit ci-après: Écriture des commandes personnalisées Django-admin

3
Strikki

Comme indiqué dans les réponses précédentes, il existe une CountryField dans Django-countries. C'est un champ modèle.

Si un champ de formulaire est nécessaire dans un formulaire simple (et non dans un modèle), dans Django-countries v3.x (testé définitivement dans 3.3), les éléments suivants peuvent être utilisés:

from Django_countries.data import COUNTRIES

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

Lien vers le package: Django-countries
Si vous cherchez comment le faire sous des formes:

$ pip install Django-countries

>>> from Django_countries.data import COUNTRIES

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

Les mettre dans la base de données est un meilleur moyen. Pratique pour la gestion.

1
andyshi

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 savoir plus à ce sujet dans la documentation:

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

0
spedy

Voici la solution:

from Django_countries.fields import CountryField

class Foo(TimeStampedModel):

    country = CountryField()
0
josephmisiti