web-dev-qa-db-ja.com

Django:国のドロップダウンリスト?

住所情報のフォームがあります。フィールドの1つは、住所の国です。現在、これは単なるテキストボックスです。これについては(ISO 3166の国の)ドロップダウンリストが必要です。私はDjango初心者なので、まだDjangoウィジェットを選択していません。これを行うための良い方法は何ですか?

ファイルの選択肢をどこかにハードコードしますか?それらをデータベースに入れますか?テンプレートに?

20
User

Django Countries

from Django_countries.fields import CountryField

class Foo(models.Model):
    country = CountryField()
16
aehlke

CharFieldの " choices "パラメータを確認してください。

Django-countries もご覧ください。

32

2つの文字の国コードのタプルのタプルを基本的に定義する以下のスニペットを使用することになりました。さらに、CountryFieldと呼ばれるカスタムフィールドタイプを定義し、choicesパラメーターを上記で定義したタプルにデフォルト設定します。これは自動的にドロップダウンリストとしてレンダリングされます。

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

9
User

ジャンゴの国

from Django_countries.countries import COUNTRIES

class CountryForm(forms.Form):
      country= forms.ChoiceField(COUNTRIES)
8
Asinox

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/

ここでは、スニペットを作成します。

4
toto_tico

以前の回答で述べたように、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()))
3
Wtower

国だけでなく、それを含む素敵なライブラリを次に示します。 pycountry

その主な利点は、他のソリューションでハードコードされた国と比較して、Debianパッケージpkg-isocodesのラッパーであることです(したがって、自動的に更新されます)。翻訳もあります。

したがって、新しい国が表示されるか、既存の国が統合される場合は、コードを変更する必要はありません。

このライブラリを使用して、簡単なDjangoアプリをモデルCountryで作成するなど、

次に、ここで説明するカスタムDjango-adminコマンドを使用して、「country」テーブルにデータを入力して最新の状態に保つことができます。 カスタムDjango-adminコマンドの書き込み

3
Sergey Petrunin

パッケージへのリンク: Django-countries
フォームでそれを行う方法を探している場合:

$ pip install Django-countries

>>> from Django_countries.data import COUNTRIES

>>> Country = forms.ChoiceField(choices = sorted(COUNTRIES.items()))
1
tuxvador

それらをデータベースに入れる方が良い方法です。管理に便利です。

1
andyshi

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()
0
Riyad Zaigirdar

multiple=Trueを使用して解決しました:

from Django_countries.fields import CountryField    

class UserProfile(models.Model):
    countries = CountryField(multiple=True)

あなたはドキュメントでそれについてもっと読むことができます:

https://github.com/SmileyChris/Django-countries

0
spedy

これが解決策です:

from Django_countries.fields import CountryField

class Foo(TimeStampedModel):

    country = CountryField()
0
josephmisiti

9月以来リポジトリが更新されていないため、SmileyChrisはかなり忙しく、利用できないようです。ありがたいことに、Django 3以降)と互換性のあるフォーク可能なリポジトリがあります。これは次の場所にあります:

https://github.com/yunojuno/Django-countries/tree/Django-

プルリクエストのすべてのチェックに合格しますが、SmileyChrisはマージリクエストに応答していません。

インストールするには、pip install git+https://github.com/yunojuno/Django-countries.git

0
Haolin