2010-06-03 5 views
17

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

Coder en dur les choix dans un fichier quelque part? Mettez-les dans la base de données? Dans le gabarit?

Répondre

9

A terminé en utilisant l'extrait ci-dessous qui définit fondamentalement un tuple de tuples de codes de pays à deux caractères. De plus, il définit un type de champ personnalisé appelé CountryField et applique par défaut le paramètre choices au tuple défini ci-dessus. Ceci est automatiquement rendu sous la forme d'une liste déroulante.

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

+1

django-countries fournit exactement la même chose. C'est un composant réutilisable. –

+1

Quelqu'un dans le commentaire de djangosnippets recommande d'utiliser cet extrait à la place: http://djangosnippets.org/snippets/1476/ Il est plus à jour et corrige le bug 'maxlength'. –

28

Vérifiez le paramètre "choices" d'un CharField. Vous pouvez aussi regarder django-countries.

+6

+1 django-pays –

+1

Remarque qu'il y a deux projets de django-pays. Celui lié a des données beaucoup plus complètes, mais ne semble pas être activement maintenu, alors faites attention aux données obsolètes. – Marcin

+1

Semble vivre sur github maintenant: https://github.com/SmileyChris/django-countries/ – creimers

4

vérifiez this, voici une liste de tous les pays basée sur l'option ISO 3166 programmée en python et utilisation des choix dans le modèle django.

+2

Au moment où j'écris, cette page ne contient aucune donnée. – Marcin

8

Django Pays

from django_countries.countries import COUNTRIES 

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

django-countries a maintenant une classe CountryField. – aehlke

+0

cool avec CountryField – Asinox

+2

salut..il y a un problème, quand ce formulaire est rendu, par defaul il montre 'Afghanistan', qui est le premier pays dans l'ensemble de choix bien sûr ... mais que faire si le champ de pays n'est pas nécessaire? sens, par défaut montre ---- ou similaire – Mona

11

Django Countries

from django_countries.fields import CountryField 

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

grand projet essayer celui-ci – soField

+1

Notez que cela ne fournit que des codes à 2 caractères. – Marcin

+0

@monokrome Donc ce que vous dites, c'est que j'ai raison, et que vous devez faire un travail supplémentaire pour représenter le nom du pays dans n'importe quel autre format. – Marcin

1

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

3

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

Son principal avantage est qu'il est un wrapper autour de paquets Debian pkg-isocodes (peut ainsi mises à jour automatiquement avec elle) par rapport à codés en dur pays dans d'autres solutions. Il a aussi des traductions. Par conséquent, si un nouveau pays apparaît ou si les pays existants seront fusionnés, vous n'avez pas besoin de modifier 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 django-admin personnalisé commande comme décrit ici: Writing custom django-admin commands

0

Voici la solution:

from django_countries.fields import CountryField 

class Foo(TimeStampedModel): 

    country = CountryField() 
1

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

Si un champ de formulaire est nécessaire sous une forme simple (et non sous forme de modèle), dans django-countries v3.x (certainement testé en 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())) 
+1

Ceci est utile lors de la création d'un formulaire avec django-countries. Merci ! – ni8mr

Questions connexes