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
2
A
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
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
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
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
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