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?

War es hilfreich?

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.

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

Andere Tipps

Kasse "Entscheidungen"Parameter eines Charfield.

Vielleicht möchten Sie sich auch ansehen Django-Länder.

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:

https://github.com/smileychris/django-counties

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top