2009-07-16 9 views

risposta

95

A decimal field è la scelta giusta per il valore di valuta .

Si avrà un aspetto simile:

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

A meno che non si desideri rappresentare il debito nazionale, nel qual caso max_digits deve essere> 20 –

+0

decimal_places = 2 non è necessariamente corretto se è necessario per supportare altre valute. Alcune valute hanno tre cifre decimali e Bitcoin ha un grido 8. –

+0

Penso che questo esempio sia corretto quasi per tutte le valute. Per rappresentare le valute come Bitcoin, penso sia molto meglio usare un campo intero per salvare la quantità in satoshis, e quindi mostrarlo all'utente finale nella rappresentazione che desideri (BTC, mBTC, ecc.) – jion

7

Definire un decimale e restituire un $ segno di fronte il valore.

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

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

Ti rendi conto che tu hai appena creato un ciclo infinito di ricorsione nella tua proprietà, giusto? –

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

dovrebbe creare un campo per PostgreSQL come:

"field" numeric(8, 2) NOT NULL 

Qual è il modo migliore per PostgreSQL memorizzato importo in dollari USA.

Se avete bisogno di un tipo di campo PostgreSQL "doppia precisione", allora avete bisogno di fare il modello django:

field = models.FloatField() 
17

Le altre risposte sono 100% diritto, ma non sono molto pratico come avrai ancora gestire manualmente l'uscita, la formattazione ecc

io suggerirei di usare 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, 
    ) 

funziona automaticamente da modelli:

{{ somemodel.some_currency }} 

uscita:

$123.00 

Ha un backend potente tramite python-money ed è essenzialmente un rimpiazzo per i campi decimali standard.

+0

* (con controllo degli errori, desidera solo un numero preciso in centesimi), formattarlo per l'output agli utenti in luoghi diversi e utilizzarlo per calcolare altri numeri. * In questi casi, utilizzare 'DecimalField' è più pratico. E credo che sia applicato per la maggior parte delle persone. Usando 'django-money' come hanno evidenziato, includi la gestione ** Valuta **.Quindi questo è più per progetti che coinvolgono transazioni come siti di e-commerce, gateway di pagamento, valuta digitale, banche, ecc ... – Yeo

+0

Direi che dal momento che stanno lavorando con l'USD - una valuta - ha più senso usa una libreria di gestione della valuta come django-money (python-money) in quanto rende tutto funzionante come ti aspetteresti e ti consente di apportare modifiche alle funzioni future. La domanda originale dice che hanno bisogno di formattazione e calcolo (come hai citato) e per questo è meglio usare una libreria di valute invece di un semplice campo decimale. –

Problemi correlati