web-dev-qa-db-ja.com

最適なDjango=米ドル金額を表すために使用するモデルフィールドは何ですか?

Djangoモデルのフィールドに米ドルの金額を格納する必要があります。使用するのに最適なモデルフィールドタイプは何ですか?ユーザーにこの値を入力させる必要があります(エラーチェック、セント単位の正確な数値のみが必要)、さまざまな場所のユーザーへの出力用にフォーマットし、それを使用して他の数値を計算します。

84
MikeN

10進数フィールド は、通貨値の正しい選択です。

次のようになります。

credit = models.DecimalField(max_digits=6, decimal_places=2)
130
simplyharsh
field = models.DecimalField(max_digits=8, decimal_places=2)

Max_digitsは> = decimal_placesである必要があることに注意してください。この設定例では、999,999.99までの値を許可します

ドキュメント: https://docs.djangoproject.com/en/1.10/ref/models/fields/#decimalfield

33
Lee Hinde

他の答えは100%正しいですが、出力、フォーマットなどを手動で管理する必要があるため、あまり実用的ではありません。

Django-money を使用することをお勧めします。

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


def SomeModel(models.Model):
    some_currency = MoneyField(
        decimal_places=2,
        default=0,
        default_currency='USD',
        max_digits=11,
    )

テンプレートから自動的に動作します:

{{ somemodel.some_currency }}

出力:

$123.00

Python-moneyを介した強力なバックエンドがあり、基本的には標準の10進数フィールドのドロップイン置換です。

29

小数を定義し、値の前に$記号を返します。

    price = models.DecimalField(max_digits=8, decimal_places=2)

    @property
    def price_display(self):
        return "$%s" % self.price
6
Çagatay Melan
field = models.DecimalField(max_digits=8, decimal_places=2)

次のようなPostgreSQLのフィールドを作成する必要があります。

 "field" numeric(8, 2) NOT NULL

これは、PostGreSQLに保存された米ドル金額の最良の方法です。

PostgreSQLのフィールドタイプ「倍精度」が必要な場合は、Django model:

field = models.FloatField()
1
herohat