住所情報のフォームがあります。フィールドの1つは、住所の国です。現在、これは単なるテキストボックスです。これについては(ISO 3166の国の)ドロップダウンリストが必要です。私はDjango初心者なので、まだDjangoウィジェットを選択していません。これを行うための良い方法は何ですか?
ファイルの選択肢をどこかにハードコードしますか?それらをデータベースに入れますか?テンプレートに?
from Django_countries.fields import CountryField
class Foo(models.Model):
country = CountryField()
CharFieldの " choices "パラメータを確認してください。
Django-countries もご覧ください。
2つの文字の国コードのタプルのタプルを基本的に定義する以下のスニペットを使用することになりました。さらに、CountryFieldと呼ばれるカスタムフィールドタイプを定義し、choicesパラメーターを上記で定義したタプルにデフォルト設定します。これは自動的にドロップダウンリストとしてレンダリングされます。
ジャンゴの国
from Django_countries.countries import COUNTRIES
class CountryForm(forms.Form):
country= forms.ChoiceField(COUNTRIES)
以前の回答で述べたように、Django-countries
にはCountryField
があります。これはモデルフィールドです。
フォームフィールドがプレーンなフォーム(モデルフォームではない)で必要な場合、Django-countries
v3.x(3.3で完全にテスト済み)では、以下を使用できます。
from Django_countries.data import COUNTRIES
class MyForm(forms.Form):
country = forms.ChoiceField(sorted(COUNTRIES.items()))
国だけでなく、それを含む素敵なライブラリを次に示します。 pycountry
その主な利点は、他のソリューションでハードコードされた国と比較して、Debianパッケージpkg-isocodesのラッパーであることです(したがって、自動的に更新されます)。翻訳もあります。
したがって、新しい国が表示されるか、既存の国が統合される場合は、コードを変更する必要はありません。
このライブラリを使用して、簡単なDjangoアプリをモデルCountryで作成するなど、
次に、ここで説明するカスタムDjango-adminコマンドを使用して、「country」テーブルにデータを入力して最新の状態に保つことができます。 カスタムDjango-adminコマンドの書き込み
パッケージへのリンク: Django-countries
フォームでそれを行う方法を探している場合:
$ pip install Django-countries
>>> from Django_countries.data import COUNTRIES
>>> Country = forms.ChoiceField(choices = sorted(COUNTRIES.items()))
それらをデータベースに入れる方が良い方法です。管理に便利です。
Form.Formクラスを拡張する場合は、Countryfieldの直後に.formfieldを指定し、formfield()パラメータで属性を指定する必要があります。
from Django_countries.fields import CountryField
class CheckOutForm(forms.Form):
country = CountryField().formfield()
しかし、models.Modelクラスから拡張する場合は、Coutryfieldを定義するだけで十分です。
from Django_countries.fields import CountryField
class CheckOutForm(models.Model):
country = CountryField()
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()
9月以来リポジトリが更新されていないため、SmileyChrisはかなり忙しく、利用できないようです。ありがたいことに、Django 3以降)と互換性のあるフォーク可能なリポジトリがあります。これは次の場所にあります:
https://github.com/yunojuno/Django-countries/tree/Django-
プルリクエストのすべてのチェックに合格しますが、SmileyChrisはマージリクエストに応答していません。
インストールするには、pip install git+https://github.com/yunojuno/Django-countries.git