2010-11-04 2 views
2

Я использую Django на бэкэнд и jQuery на передней панели. Я хотел бы принять как фракции, так и целые числа (например, «1/2», «1 1/4» или «2», для количества ингредиентов в рецепте.) Я использую FloatField для хранения этих значений. Каков наилучший способ преобразования этих дробей/целых чисел в поплавки?Разбор фракции в форме Django

ответ

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

К сожалению, fraction конструктор не обрабатывает смешанные фракции («1 1/2»), так что вам придется написать что-то, чтобы разобрать те себя. Вы можете сохранить их в базе данных либо с помощью настраиваемого поля, либо путем их литья до float.

+0

Да, я хотел знать, как хранить его в базе данных. Я искал переписывание методов clean/to_python, но создание настраиваемого поля кажется лучшим вариантом. – tocf

+0

Да, я думаю, что имеет смысл хранить их как фракции. К сожалению, я не знаю Django, поэтому не могу помочь с настраиваемой областью; если вы перефразируете вопрос, у вас может быть больше удачи. – katrielalex

+0

Это хорошо, документация/код Django очень полезна, и я получил ее работу. Спасибо! – tocf

0

Это работает для меня. Все еще можно немного почистить.

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 
Смежные вопросы