Le champ suivant est destiné à formater de l'argent en deux décimales (quantifiées). Vous pouvez voir qu'il renvoie une version <decimal>.quantize(TWOPLACES)
du nombre décimal stocké. Quand je regarde ceci dans l'admin de Django cependant, il ne fait pas cela. Si je mets 50
dans un champ qui utilise CurrencyField()
et l'affiche dans l'admin, j'obtiens 50
vs 50.00
. Pourquoi donc?Django: Pourquoi ce champ de modèle personnalisé ne se comporte-t-il pas comme prévu?
from django.db import models
from decimal import Decimal
class CurrencyField(models.DecimalField):
"""
Only changes output into a quantized format. Everything else is the same.
"""
def __init__(self, *args, **kwargs):
kwargs['max_digits'] = 8
kwargs['decimal_places'] = 2
super(CurrencyField, self).__init__(*args, **kwargs)
def to_python(self, value):
try:
return super(CurrencyField, self).to_python(value).quantize(Decimal('0.01'))
except AttributeError:
return None
Mise à jour: J'ai essayé de mettre en place return 'Hello World'
de return super(CurrencyField, self).to_python(value).quantize(Decimal('0.01'))
et il n'a même pas spectacle « Bonjour tout le monde » dans la coquille. Il a sorti 50
encore. Cela signifie-t-il que lorsque j'accède à un attribut d'un modèle CurrencyField()
, il n'appelle pas to_python()
?
Vous êtes mon héros! – orokusaki