用于表示美元金额的最佳django模型字段是什么?

时间:2009-07-16 18:23:35

标签: django django-models

我需要在Django模型的字段中存储美元金额。什么是最好的模型字段类型?我需要能够让用户输入这个值(通过错误检查,只需要一个精确到美分的数字),格式化它以输出给不同地方的用户,并用它来计算其他数字。

5 个答案:

答案 0 :(得分:127)

decimal field是正确的选择 货币价值。

它看起来像:

credit = models.DecimalField(max_digits=6, decimal_places=2)

答案 1 :(得分:33)

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

答案 2 :(得分:27)

其他答案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,它实际上是标准十进制字段的直接替换。

答案 3 :(得分:6)

定义小数并在值前面返回$符号。

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

    @property
    def price_display(self):
        return "$%s" % self.price

答案 4 :(得分:1)

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

应为PostgreSQL创建一个字段,如:

 "field" numeric(8, 2) NOT NULL

这是PostGreSQL存储美元金额的最佳方式。

如果你需要一个PostgreSQL字段类型“双精度”,那么你需要在django模型中做:

field = models.FloatField()