2010-11-05 4 views
1

J'ai un formulaire Django dont les champs sont parfois vides, ont parfois une valeur initiale par défaut, et parfois sont remplis par des valeurs d'un modèle associé. Dans ces deux derniers cas, je DecimalFields qui vont vers le modèle comme ceci:Formatage des valeurs de champs dans un formulaire Django

<input type="text" name="foo" value="10.00"/> 

Le problème est que je veux être en mesure de formater cet attribut de valeur avec des filtres de modèle, ou un équivalent. Par exemple, pour l'entrée ci-dessus, je voudrais utiliser le filtre floatformat de sorte qu'au lieu de montrer les zéros étrangers, il suffit d'imprimer:

<input type="text" name="foo" value="10"/> 

Toute personne tomber sur quelque chose comme ça avant?

+0

6 ans plus tard et c'est toujours un problème. La sortie de valeur initiale doit être soumise à l'attribut 'decimal_places'. – grokpot

Répondre

1

Je suppose que vous utilisez {{form}} ou {{form.field_name}} et ne peut donc pas faire:

<input type="text" name="foo" value="{{value | floatformat}}"/> 

Si oui, vous pouvez boucle à travers les champs dans la méthode constructeur et autour d'eux comme bon vous semble, à savoir:

def __init__(self, *args, **kwargs): 
    super(MyForm, self).__init__(*args, **kwargs) 

    for key in self.fields: 
     try: 
      self.fields[key].initial = round(self.fields[key].initial, 2) 
     except: 
      pass 

Évidemment, vous aurez envie de modifier la ligne d'arrondi réel selon vos besoins - vous pouvez imiter le comportement de floatformat si vous voulez.

Questions connexes