Python
 Computer >> コンピューター >  >> プログラミング >> Python

Djangoで国(Country)フィールドを実装する方法|django-countriesの使い方を徹底解説

フォームやデータベースに「国」の情報を追加したい場合、CharFieldを使うこと自体は可能ですが、国名の入力ルールが曖昧になりやすく、必ずしも良い設計とは言えません。そこで便利なのが、Django向けのサードパーティパッケージ「django-countries」です。このパッケージを使えば、ISO規格に準拠した国名リストを持つ専用フィールドを簡単に実装できます。

本記事では、django-countriesを使ってDjangoプロジェクトにCountryフィールドを追加する手順を、実際のコード例とともにわかりやすく解説します。

事前準備:プロジェクトとアプリの作成

まずはDjangoプロジェクトとアプリを作成しましょう。作成したら、アプリをINSTALLED_APPSに登録し、URLの設定も済ませておいてください。

django-countriesのインストール

次のコマンドでdjango-countriesモジュールをインストールします。

pip install django-countries

続いて、settings.pyに以下の行を追加して、アプリとして登録します。

INSTALLED_APPS += [ 'django_countries']

実装例

1. URLの設定(urls.py)

アプリ内のurls.pyを以下のように設定します。

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name="home"),
]

まずはURLルーティングを整えておきましょう。

2. ビューの作成(views.py)

次に、views.pyにフォーム処理を記述します。

from django.shortcuts import render
from django import forms
from .models import Data
class SalaryForm(forms.ModelForm):
    class Meta:
        model=Data
        fields="__all__"
def home(request):
    if request.method=='POST':
        form=SalaryForm(request.POST)
        if form.is_valid():
            form.save()

    else:
        form=SalaryForm()
    return render(request,'home.html',{'form':form})

ここではシンプルなModelFormを作成し、GETリクエスト時にはフォームを描画し、POSTリクエスト時には入力データを検証・保存する処理を行っています。

3. テンプレートの作成(home.html)

アプリディレクトリ直下にtemplatesフォルダを作成し、その中にhome.htmlを配置します。

<!DOCTYPE html>
<html>
    <head>
        <title>
            TUT
        </title>
        <style>

        </style>
    </head>
    <body>
        <h2>FORM</h2>
        <form action="/" method="post">
            {% csrf_token %}
            {{ form }}
            <input type="submit" value="Submit">
        </form>
    </body>
</html>

これはフォームを表示するためのフロントエンド側のHTMLです。CSRFトークンの設定も忘れずに行いましょう。

4. モデルの定義(models.py)

次に、models.pyでモデルを定義します。ここが今回のポイントです。

from django.db import models
from django_countries.fields import CountryField

# Create your models here.
class Data(models.Model):
    Name=models.CharField(max_length=100)
    salary = models.CharField(max_length=20)
    country_of_work = CountryField(blank=True)

django_countries.fieldsからCountryFieldをインポートし、通常のフィールドと同じようにモデルへ追加するだけでOKです。これにより、世界中の国名を選択できるドロップダウンが自動的に生成されます。blank=Trueを指定しているため、未入力での保存も許可されます。

マイグレーションの実行

最後に、マイグレーションファイルを作成し、データベースへ反映します。

python manage.py makemigrations
python manage.py migrate

これですべての準備は完了です。開発サーバーを起動して、ブラウザから動作を確認してみましょう。

出力結果

ブラウザでページを開くと、国名を選択できるプルダウンメニュー付きのフォームが表示されます。ユーザーは一覧から該当する国を選ぶだけで、正しい形式でデータベースに保存されます。

Djangoで国(Country)フィールドを実装する方法|django-countriesの使い方を徹底解説

まとめ

django-countriesを使えば、数行のコードを追加するだけで、国際標準に沿ったCountryフィールドを簡単に実装できます。住所入力フォームやユーザープロフィールなど、国名情報を扱う場面では、CharFieldの手入力ではなくこのパッケージの活用を検討すると、入力ミスの防止やデータの一貫性向上につながります。

  1. DjangoでMoneyフィールド(金額フィールド)を追加する方法を徹底解説

    Webサイトを開発していると、給与や料金、収入といった金額に関するデータを扱う場面がよくあります。Djangoには標準で整数型のフィールドが用意されていますが、金額データの処理には必ずしも適していません。そこで便利なのが、サードパーティ製ライブラリ「django-money」です。このライブラリを使えば、通貨情報付きのMoneyフィールドをモデルに簡単に追加できます。 この記事では、django-moneyを使ってDjangoモデルに金額フィールドを実装する手順を、サンプルコードとともにわかりやすく解説します。 事前準備:プロジェクトとアプリの作成 まずはDjangoプロジェクトとアプリを作

  2. Googleフォームの作成方法を徹底解説!初心者向け完全ガイド

    Googleフォームは、おすすめポイントがたくさんある便利なアプリです。操作がシンプルで、共有も簡単、インターフェースもすっきりと洗練されています。そして何より大きな魅力は、Googleフォームが無料で使えるという点でしょう。Googleアカウントを持っていれば、誰でもすぐにGoogleフォームを利用できます。アンケート調査、クイズ、その他あらゆる種類のフォーム作成に活躍する、非常に優れたツールです。この記事では、Googleフォームをわずか数ステップで作成する方法を、画像付きでわかりやすくご紹介します。1. Googleフォームの作成を始めるまず、forms.google.com にアクセス