什么是最好的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()