Django: Paese discesa?
-
23-10-2019 - |
Domanda
Ho una forma di informazioni di indirizzo. Uno dei campi è per il paese di indirizzo. Attualmente questa è solo una casella di testo. Vorrei un elenco a discesa (ISO 3166 paesi) per questo. Sono un newbie Django quindi non ho nemmeno usato un Django Select widget di ancora. Che cosa è un buon modo per fare questo?
Hard-codice le scelte in un file da qualche parte? Metteteli nel database? Nel modello?
Soluzione 3
finito per usare il frammento di sotto che definisce fondamentalmente una tupla di tuple di due codici di paese di carattere. Inoltre si definisce un tipo di campo personalizzato chiamato countryfield e le impostazioni predefinite del parametro scelte alla tupla sopra definito. Questo viene automaticamente visualizzato come un elenco a discesa.
Altri suggerimenti
Check out "fino scelte " parametro di un CharField .
Si potrebbe anche voler dare un'occhiata al django-Paesi .
from django_countries.fields import CountryField
class Foo(models.Model):
country = CountryField()
Django Paesi
from django_countries.countries import COUNTRIES
class CountryForm(forms.Form):
country= forms.ChoiceField(COUNTRIES)
Due bassi progetti che intrattieni:
http://code.google.com/p/django-countries/
https://github.com/strange/django-country-utils
Due frammenti:
http://djangosnippets.org/snippets/494/
http://djangosnippets.org/snippets/1476/
Per il momento, sto andando per un frammento.
Ecco una bella libreria con i paesi (e non solo): pycountry
Il suo vantaggio principale è che si tratta di un wrapper pacchetto Debian PKG-codici ISO (quindi possono aggiorna automaticamente con esso) rispetto ai paesi hard-coded in altre soluzioni. Ha anche traduzioni.
Quindi, se di nuovo appare paese o dei paesi esistenti saranno fusi insieme non è necessario modificare il codice.
Ho trovato utile utilizzare questa biblioteca e creare una semplice app Django con il modello di Paese, ad esempio
Poi si può compilare e tenere aggiornato il vostro tavolo 'campagna' per mezzo di comando personalizzato django-admin come descritto qui: Scrivendo su misura django-admin comandi
Per quanto risposte precedenti hanno già detto, c'è un CountryField
in django-countries
. Questo è un campo modello.
Se un campo di modulo è necessario in una forma semplice (forma non modello), in django-countries
V3.x (sicuramente testato in 3.3) è possibile utilizzare il seguente:
from django_countries.data import COUNTRIES
class MyForm(forms.Form):
country = forms.ChoiceField(sorted(COUNTRIES.items()))
Metteteli nel database è un modo migliore. Comodo per la gestione.
Link al pacchetto: django-paesi
Se alla ricerca di come farlo in forme:
$ pip install django-countries
>>> from django_countries.data import COUNTRIES
>>> Country = forms.ChoiceField(choices = sorted(COUNTRIES.items()))
Ecco la soluzione:
from django_countries.fields import CountryField
class Foo(TimeStampedModel):
country = CountryField()
ho risolto utilizzando multiple=True
:
from django_countries.fields import CountryField
class UserProfile(models.Model):
countries = CountryField(multiple=True)
Si può leggere di più su di esso nella documentazione: