Я использую Django на бэкэнд и jQuery на передней панели. Я хотел бы принять как фракции, так и целые числа (например, «1/2», «1 1/4» или «2», для количества ингредиентов в рецепте.) Я использую FloatField для хранения этих значений. Каков наилучший способ преобразования этих дробей/целых чисел в поплавки?Разбор фракции в форме Django
2
A
ответ
1
>>> import fractions
>>> fractions.Fraction("1")
Fraction(1, 1)
>>> fractions.Fraction("1/2")
Fraction(1, 2)
К сожалению, fraction
конструктор не обрабатывает смешанные фракции («1 1/2»), так что вам придется написать что-то, чтобы разобрать те себя. Вы можете сохранить их в базе данных либо с помощью настраиваемого поля, либо путем их литья до float
.
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
Да, я хотел знать, как хранить его в базе данных. Я искал переписывание методов clean/to_python, но создание настраиваемого поля кажется лучшим вариантом. – tocf
Да, я думаю, что имеет смысл хранить их как фракции. К сожалению, я не знаю Django, поэтому не могу помочь с настраиваемой областью; если вы перефразируете вопрос, у вас может быть больше удачи. – katrielalex
Это хорошо, документация/код Django очень полезна, и я получил ее работу. Спасибо! – tocf