2009-07-16 63 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錢了強大的後端,它本質上是一個下拉更換爲標準的十進制領域。

相關問題