J'ai besoin de stocker un montant en dollars américains dans un champ d'un modèle Django. Quel est le meilleur type de champ de modèle à utiliser? Je dois pouvoir demander à l'utilisateur d'entrer cette valeur (avec vérification des erreurs, ne voulez qu'un nombre précis en cents), formatez-le pour la sortie aux utilisateurs à différents endroits et utilisez-le pour calculer d'autres nombres.
Un champ décimal est le bon choix pour la valeur monétaire.
Cela ressemblera à quelque chose comme:
credit = models.DecimalField(max_digits=6, decimal_places=2)
field = models.DecimalField(max_digits=8, decimal_places=2)
Notez que max_digits doit être> = decimal_places. Cet exemple de paramètre autoriserait une valeur jusqu'à: 999 999,99
Documents: https://docs.djangoproject.com/en/1.10/ref/models/fields/#decimalfield
Les autres réponses sont correctes à 100% mais ne sont pas très pratiques car vous devrez toujours gérer manuellement la sortie, le formatage, etc.
Je suggère d'utiliser 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,
)
Fonctionne automatiquement à partir de modèles:
{{ somemodel.some_currency }}
Sortie:
$123.00
Il a un backend puissant via python-money et c'est essentiellement un remplacement direct pour les champs décimaux standard.
Définissez une décimale et retournez un signe $ devant la valeur.
price = models.DecimalField(max_digits=8, decimal_places=2)
@property
def price_display(self):
return "$%s" % self.price
field = models.DecimalField(max_digits=8, decimal_places=2)
Devrait créer un champ pour PostgreSQL comme:
"field" numeric(8, 2) NOT NULL
Quel est le meilleur moyen pour PostGreSQL de stocker le montant en dollars américains.
Si vous avez besoin d'un type de champ PostgreSQL "double précision", alors vous devez le faire dans le modèle Django:
field = models.FloatField()