2010-11-04 7 views
2

J'utilise Django sur le backend et jQuery sur le frontal. Je voudrais accepter les fractions et les nombres entiers (comme "1/2", "1 1/4" ou "2", pour les quantités d'ingrédients dans une recette). J'utilise un FloatField pour stocker ces valeurs. Quelle est la meilleure façon de convertir ces fractions/nombres entiers en flotteurs?Analyse d'une fraction dans un formulaire Django

Répondre

1
>>> import fractions 
>>> fractions.Fraction("1") 
Fraction(1, 1) 
>>> fractions.Fraction("1/2") 
Fraction(1, 2) 

Malheureusement, le constructeur fraction ne gère pas les fractions mixtes (« 1 1/2 ») vous devrez donc écrire quelque chose pour analyser ces soi-même. Vous pouvez les stocker dans la base de données avec un champ personnalisé ou en les convertissant en float.

+0

Oui, je voulais savoir comment le stocker dans la base de données. Je cherchais à écraser les méthodes clean/to_python, mais créer un champ personnalisé semble être la meilleure option. – tocf

+0

Oui, je pense qu'il est plus logique de les stocker sous forme de fractions. Malheureusement, je ne connais pas Django, donc je ne peux pas aider avec le champ personnalisé; Si vous reformulez la question, vous pourriez avoir plus de chance. – katrielalex

+0

Très bien, la documentation/le code de Django est très utile et j'ai réussi à le faire fonctionner. Je vous remercie! – tocf

0

Cela fonctionne pour moi. Pourrait encore être nettoyé un peu.

import fractions 

def parse_multi_part_fraction(f): 
    if '/' not in f: 
     return float(f) 
    parts = f.split(' ') 
    total = 0.0 
    for p in parts: 
     if '/' in p: 
      frac = fractions.Fraction(p) 
      total += frac.numerator * (1.0/frac.denominator) 
     else: 
      total += float(p) 
    return total 
Questions connexes