2009-07-16 96 views
59

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

回答

95

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

它看起来是这样的:

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

除非你想代表国家债务,在这种情况下max_digits必须> 20 – 2016-08-17 14:44:34

+0

decimal_places = 2不一定正确,如果你需要这个支持其他货币。一些货币有三位小数,比特币有百日咳8. – 2018-01-13 13:29:44

+0

我认为这个例子几乎对所有货币都是正确的。为了将货币表示为比特币,我认为使用整数域来保存satoshis中的金额要好得多,然后将其显示给最终用户(BTC,mBTC等) – jion 2018-01-21 06:01:38

7

定义小数和值前面返回一个$符号。

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

    @property 
    def price(self): 
     return "$%s" % self.price 
1
field = models.DecimalField(max_digits=8, decimal_places=2) 

应该创建一个领域对PostgreSQL,如:

"field" numeric(8, 2) NOT NULL 

这是PostgreSQL的存储美金金额的最佳途径。

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

field = models.FloatField() 
17

其他的答案是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钱了强大的后端,它本质上是一个下拉更换为标准的十进制领域。

相关问题