2010-01-18 3 views
4

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()?

Répondre

6

Peut-être que vous pourriez essayer d'ajouter ceci à votre champ:

__metaclass__ = models.SubfieldBase 

Voir aussi here.

+0

Vous êtes mon héros! – orokusaki

Questions connexes