web-dev-qa-db-fra.com

Quel est le meilleur champ de modèle Django à utiliser pour représenter un montant en dollars américains?

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.

84
MikeN

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)
130
simplyharsh
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

33
Lee Hinde

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.

29
Michael Thompson

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
6
Çagatay Melan
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()
1
herohat