住所情報のフォームがあります。フィールドの 1 つは住所の国です。現在、これは単なるテキストボックスです。このドロップダウン リスト (ISO 3166 の国のリスト) が欲しいです。私は Django の初心者なので、まだ Django Select ウィジェットを使用したことさえありません。これを行う良い方法は何ですか?
ファイルのどこかに選択肢をハードコードしますか? それらをデータベースに入れますか?テンプレで?
住所情報のフォームがあります。フィールドの 1 つは住所の国です。現在、これは単なるテキストボックスです。このドロップダウン リスト (ISO 3166 の国のリスト) が欲しいです。私は Django の初心者なので、まだ Django Select ウィジェットを使用したことさえありません。これを行う良い方法は何ですか?
ファイルのどこかに選択肢をハードコードしますか? それらをデータベースに入れますか?テンプレで?
CharField の「 choices 」パラメーターを確認してください。
django-countriesも参照してください。
from django_countries.fields import CountryField
class Foo(models.Model):
country = CountryField()
基本的に2文字の国コードのタプルのタプルを定義する以下のスニペットを使用することになりました。さらに、CountryField というカスタム フィールド タイプを定義し、choices パラメータを上記で定義したタプルにデフォルト設定します。これは、ドロップダウン リストとして自動的に表示されます。
ジャンゴの国
from django_countries.countries import COUNTRIES
class CountryForm(forms.Form):
country= forms.ChoiceField(COUNTRIES)
2 つの低管理プロジェクト:
http://code.google.com/p/django-countries/
https://github.com/strange/django-country-utils
2 つのスニペット:
http://djangosnippets.org/snippets/494/
http://djangosnippets.org/snippets/1476/
今のところ、私はスニペットに行きます。
これは国を含む素敵なライブラリです(そしてそれだけではありません):pycountry
その主な利点は、他のソリューションのハードコード化された国と比較して、Debian パッケージ pkg-isocodes のラッパーであることです (したがって、自動的に更新できます)。訳語もあります。
したがって、新しい国が表示されるか、既存の国が統合される場合、コードを変更する必要はありません。
このライブラリを使用して、たとえば国をモデルにした単純な Django アプリを作成すると便利であることがわかりました。
次に、ここで説明されているように、カスタム django-admin コマンドを使用して、「国」テーブルにデータを入力し、最新の状態に保つことができます:カスタム django-admin コマンドの作成
それらをデータベースに入れる方が良い方法です。管理に便利。
私はそれを使用して解決しましたmultiple=True
:
from django_countries.fields import CountryField
class UserProfile(models.Model):
countries = CountryField(multiple=True)
ドキュメントで詳細を読むことができます:
解決策は次のとおりです。
from django_countries.fields import CountryField
class Foo(TimeStampedModel):
country = CountryField()