Django:カントリードロップダウンリスト?
-
23-10-2019 - |
質問
アドレス情報のフォームがあります。フィールドの1つは、住所国です。現在、これは単なるテキストボックスです。このために(ISO 3166か国の)ドロップダウンリストが欲しいです。私はDjangoの初心者なので、Django Selectウィジェットもまだ使用していません。これを行う良い方法は何ですか?
どこかでファイルの選択肢をハードコードしますか?それらをデータベースに入れますか?テンプレートで?
解決 3
最終的には、2つのキャラクターの国コードのタプルのタプルを基本的に定義する以下のスニペットを使用しました。さらに、Countryfieldと呼ばれるカスタムフィールドタイプを定義し、上記の定義されたタプルに選択肢パラメーターをデフォルトします。これにより、ドロップダウンリストとして自動的にレンダリングされます。
他のヒント
チェックアウト "選択肢「チャーフィールドのパラメーター。
あなたも見たいかもしれません Django-Countries.
from django_countries.fields import CountryField
class Foo(models.Model):
country = CountryField()
Django諸国
from django_countries.countries import COUNTRIES
class CountryForm(forms.Form):
country= forms.ChoiceField(COUNTRIES)
2つの低いマントされたプロジェクト:
http://code.google.com/p/django-countres/
https://github.com/strange/django-country-utils
2つのスニペット:
http://djangosnippets.org/snippets/494/
http://djangosnippets.org/snippets/1476/
今のところ、私はスニペットに行きます。
これは、国の(そして単なる)国のある素敵な図書館です。 パイカーリー
その主な利点は、他のソリューションのハードコーディングされた国と比較して、DebianパッケージPKGイソコード(したがって自動的に更新できる)をめぐるラッパーであることです。翻訳もあります。
したがって、新しい国が現れたり、既存の国が統合されたりする場合、コードを変更する必要はありません。
このライブラリを使用して、モデル国でシンプルなDjangoアプリを作成するのが便利だと思いました。
次に、ここで説明するように、カスタムDjango-Adminコマンドを使用して、「国」テーブルを最新の状態に保つことができます。 カスタムDjango-Adminコマンドを作成します
以前の答えが述べたように、aがあります CountryField
の django-countries
. 。これはモデルフィールドです。
フォームフィールドがプレーンフォームで必要な場合(モデル形式ではありません)、 django-countries
v3.x(3.3で間違いなくテスト)以下を使用できます。
from django_countries.data import COUNTRIES
class MyForm(forms.Form):
country = forms.ChoiceField(sorted(COUNTRIES.items()))
それらをデータベースに入れておくと、より良い方法です。管理に便利です。
パッケージへのリンク: Django-Countries
フォームでそれを行う方法を探している場合:
$ pip install django-countries
>>> from django_countries.data import COUNTRIES
>>> Country = forms.ChoiceField(choices = sorted(COUNTRIES.items()))
これが解決策です:
from django_countries.fields import CountryField
class Foo(TimeStampedModel):
country = CountryField()
使用して解決しました multiple=True
:
from django_countries.fields import CountryField
class UserProfile(models.Model):
countries = CountryField(multiple=True)
詳細については、ドキュメントで読むことができます。