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

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

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

この記事では、django-moneyを使ってDjangoモデルに金額フィールドを実装する手順を、サンプルコードとともにわかりやすく解説します。

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

まずはDjangoプロジェクトとアプリを作成しましょう。ここでは、プロジェクト名を「MoneyFieldDemo」、アプリ名を「myapp」とします。

続いて、urls.pyINSTALLED_APPSなどの基本設定を行っておきます。

django-moneyのインストール

以下のコマンドでライブラリをインストールします。

pip install django-money

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

INSTALLED_APPS += ["djmoney"]

実装例

1. urls.py の設定

アプリのurls.pyに、以下のコードを追加します。

from django.urls import path
from . import views

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

ここでは、HTMLページを表示するためのURLエンドポイントをシンプルに定義しています。

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

templatesフォルダ内のhome.htmlに、以下のコードを記述します。

<!DOCTYPE html>
<html>
    <head>
        <title>
            TUT
        </title>
    </head>
    <body>
        <h2>Hi</h2>
        <form action="/" method="post">
            {% csrf_token %}
            {{ form }}
            <input type="submit" value="Submit">
        </form>
    </body>
</html>

これはフロントエンドとして表示するHTMLファイルです。フォームから金額データを送信できるようになっています。

3. models.py にMoneyフィールドを定義

models.pyに、以下のコードを追加します。

from django.db import models
from djmoney.models.fields import MoneyField

# Create your models here.
class Data(models.Model):
    Name = models.CharField(max_length=100)
    salary = MoneyField(max_digits=14, decimal_places=2, default_currency='USD')  # これがMoneyフィールド

ここでは、「従業員名」と「USD建ての給与」という2つのフィールドを持つモデルを作成しました。MoneyFieldの主な引数は以下の通りです。

  • max_digits:金額全体の最大桁数
  • decimal_places:小数点以下の桁数
  • default_currency:デフォルトの通貨コード(ここではUSD)

なお、default_currencyには「JPY」「EUR」など任意のISO通貨コードを指定できます。

4. views.py でフォームを処理

views.pyに、以下のコードを追加します。

from django.shortcuts import render
from django import forms
from .models import Data
# Create your views here.

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})

views.pyの処理は特別に複雑なものではありません。ModelFormを作成し、それをテンプレートにレンダリングするとともに、POSTリクエストを受け取ってデータを保存するだけのシンプルな構成です。

実行結果

サーバーを起動してページにアクセスすると、従業員名と給与(USD)を入力できるフォームが表示されます。金額を入力して送信すれば、通貨情報付きの状態でデータベースに保存されます。

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

このように、django-moneyを活用することで、通貨単位を明確に管理できる金額フィールドを簡単に実装できます。多通貨対応やフォーマット表示など、金額データを本格的に扱いたい場合にぜひ活用してみてください。

  1. DjangoプロジェクトにDebug Toolbar(デバッグツールバー)を導入する方法

    Django Debug Toolbarは、データベースクエリの確認やWebサイトの読み込み速度の計測など、さまざまなデバッグ作業に活用できる強力なツールです。開発者の間で非常に人気が高く、多くのプロジェクトで採用されています。この記事では、その具体的な導入手順をステップごとに解説します。 実装例 まず、「myapp」という名前のアプリを作成しておきましょう。 1. django-debug-toolbarのインストール 最初に、django-debug-toolbarをインストールします。 pip install django-debug-toolbar 2. INSTALLED_APPSへ

  2. Tkinterで画像を追加・表示する方法を解説!Pillowとfiledialogの使い方

    画像は、あらゆるアプリケーションにおいて非常に有用な要素のひとつです。Pythonでは、Pillow(PIL)パッケージを利用することで、Tkinterアプリケーション内でも簡単に画像を扱うことができます。画像の読み込みや抽出、画像ペインの設定など、便利な機能が多数用意されています。 サンプルコード:ダイアログで選択した画像を表示する 以下の例では、ユーザーがファイルダイアログから画像を選択し、その画像をLabelウィジェットを使ってウィンドウ上に表示します。 #Tkinterライブラリをインポート from tkinter import * from tkinter import ttk