Django: Country Dropdown -Liste?
-
23-10-2019 - |
Frage
Ich habe ein Formular für Adressinformationen. Eines der Felder ist für das Adressland. Derzeit ist dies nur ein Textfeld. Ich hätte gerne eine Dropdown -Liste (von ISO 3166 Ländern) dafür. Ich bin ein Django -Neuling, also habe ich noch nicht einmal ein Django -Select -Widget verwendet. Was ist ein guter Weg, dies zu tun?
Hardcode die Auswahlmöglichkeiten in einer Datei irgendwo? Sie in die Datenbank einfügen? In der Vorlage?
Lösung 3
Am Ende des folgenden Snippets, das im Grunde genommen ein Tupel von Tupel von zwei Charakter -Land -Codes definiert. Zusätzlich definiert es einen benutzerdefinierten Feldtyp namens CountryField und stellt den Auswahlparameter für das obige definierte Tupel standardmäßig aus. Dies wird automatisch als Dropdown -Liste gerendert.
Andere Tipps
Kasse "Entscheidungen"Parameter eines Charfield.
Vielleicht möchten Sie sich auch ansehen Django-Länder.
from django_countries.fields import CountryField
class Foo(models.Model):
country = CountryField()
Django -Länder
from django_countries.countries import COUNTRIES
class CountryForm(forms.Form):
country= forms.ChoiceField(COUNTRIES)
Zwei Projekte mit niedrigem mantierten Projekten:
http://code.google.com/p/django-counties/
https://github.com/strange/django-country-utils
Zwei Ausschnitte:
http://djangosnippets.org/snippets/494/
http://djangosnippets.org/snippets/1476/
Im Moment gehe ich für einen Ausschnitt.
Hier ist eine schöne Bibliothek mit Ländern (und nicht nur): Pycountry
Der Hauptvorteil ist, dass es sich um einen Wrapper um das Debian-Paket PKG-Isocodes handelt (somit automatisch aktualisiert) im Vergleich zu hartcodierten Ländern in anderen Lösungen. Es hat auch Übersetzungen.
Wenn also ein neues Land erscheint oder bestehende Länder zusammengeführt werden, müssen Sie Ihren Code nicht ändern.
Ich fand es nützlich, diese Bibliothek zu verwenden und beispielsweise eine einfache Django -App mit Modellland zu erstellen
Anschließend können Sie Ihre "Land" -Tabelle über den benutzerdefinierten Django-Admin-Befehl wie hier beschrieben bevölkern und auf dem Laufenden halten: Schreiben benutzerdefinierter Django-Admin-Befehle
Wie frühere Antworten angegeben haben, gibt es eine CountryField
in django-countries
. Dies ist ein Modellfeld.
Wenn ein Formfeld in einer einfachen Form benötigt wird (nicht Modellform), in django-countries
v3.x (definitiv getestet in 3.3) Das Folgende kann verwendet werden:
from django_countries.data import COUNTRIES
class MyForm(forms.Form):
country = forms.ChoiceField(sorted(COUNTRIES.items()))
Legen Sie sie in die Datenbank ein besserer Weg. Bequem zum Management.
Link zum Paket: Django-Länder
Wenn Sie suchen, wie man es in Formularen macht:
$ pip install django-countries
>>> from django_countries.data import COUNTRIES
>>> Country = forms.ChoiceField(choices = sorted(COUNTRIES.items()))
Hier ist die Lösung:
from django_countries.fields import CountryField
class Foo(TimeStampedModel):
country = CountryField()
Ich habe es gelöst, indem ich benutzte multiple=True
:
from django_countries.fields import CountryField
class UserProfile(models.Model):
countries = CountryField(multiple=True)
Sie können mehr darüber in den Dokumenten lesen: