什么是最好的Django模型领域用来代表美元的金额?
我需要在Django模型的某个字段中存储一美元的金额。 什么是最好的模型字段types使用? 我需要能够让用户input这个值(有错误检查,只需要一个数字精确到美分),格式化输出到不同地方的用户,并用它来计算其他数字。
十进制字段是货币值的正确select。
它看起来像这样:
credit = models.DecimalField(max_digits=6, decimal_places=2)
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
其他答案是100%正确,但不是很实用,因为您仍然需要手动pipe理输出,格式化等。
我会build议使用Django的钱 :
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,它本质上是一个标准的小数字段的替代品。
定义一个小数点,并在值前面返回一个$符号。
price = models.DecimalField(max_digits=8, decimal_places=2) @property def price(self): return "$%s" % self.price
field = models.DecimalField(max_digits=8, decimal_places=2)
应该为PostgreSQL创build一个字段,如:
"field" numeric(8, 2) NOT NULL
PostGreSQL存储美元金额的最佳方式是哪一种。
如果你需要一个PostgreSQL字段types“双精度”,那么你需要在django模型中做:
field = models.FloatField()