2010-11-07 4 views
3

J'ai un projet avec de nombreux champs DecimalFields qui sont rendus dans plus de 300 modèles. Je voudrais que ces champs décimaux soient rendus normalisés. Je ne me soucie pas de la précision ou quoi que ce soit:redéfinir le comportement de filtrage par défaut dans les modèles Django

decimal.Decimal("10.0000").normalize() 

Je n'ai pas trouvé un moyen de changer le système de rendu par défaut. Je sais qu'il y a un filtre humanize et un floatformat que je pourrais utiliser dans mes templates. Mais j'ai besoin d'une solution qui ne signifie pas éditer tous ces fichiers, même si un script shell pourrait être écrit.

Merci

Répondre

2

Vous pouvez créer une sous-classe de DecimalField où vous substituez DecimalField.__str__ ou DecimalField.__unicode__ pour répondre à vos besoins. Cette méthode est appelée chaque fois que la valeur doit être rendue dans un modèle ou autre. Vous auriez seulement besoin de changer vos modèles. Le code de la classe Field est here. DecimalField est une sous-classe de ceci. Documentation sur le sous-classement Field: http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#writing-a-field-subclass

Aussi, voir cette astuce abount la méthode __unicode__: http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#some-general-advice

Edit: Je suis waaay fatigué pour avoir un sens pour le moment.

+0

Je pensais que numéro_format était gardé pour Oracle, j'ai changé directement numéro_format Code dans Django et rien ne se passe, il n'est pas appelé chaque fois que la valeur est rendue. Etes-vous sûr de ce que vous dites? Il n'y a pas non plus de documentation sur cette méthode dans djangoproject. Merci – maraujop

+0

Oui, vous avez raison. Je m'excuse d'être déroutant. Voir mon édition, je pense que je l'ai eu raison cette fois. :) – knutin

+0

J'ai édité la méthode __unicode__ de DecimalField pour ajouter une impression simple pour voir quand elle est appelée et je n'ai vu l'empreinte nulle part où je rends la valeur dans le modèle. Merci d'avoir édité votre réponse, je commence à penser que ma question n'a pas de réponse. – maraujop

Questions connexes