2013-06-24 2 views
3

У меня есть это поле формы:Как преобразовать DecimalField для float в Python Django?

area = forms.DecimalField(max_digits=20) 

Когда я его я получаю Юникода данные:

raise Exception(type(a.get('area',)) 

результат является

<type 'unicode'>

Как я могу конвертировать это, чтобы плавать? Я хочу выполнить арифметическую операцию над результатом.

Если я это сделать:

float(a.get('area', '0')) 

Тогда я получаю это

поплавок() аргумент должен быть строкой или числом

+0

Что такое 'a', можете ли вы опубликовать код вокруг него? – okm

+0

Скобки в 'raise Exception (type (a.get ('area',))' неуравновешенны. Не могли бы вы скопировать фрагменты кода? – user2357112

ответ

4

Если форма обработана, и вы получаете area как <type 'unicode'>, тогда этого достаточно для ее преобразования и выполнения арифметики.

area = form.data['area'] 
#area should be <type 'unicode'> 
area_float = float(area) 

Рассмотрим следующий пример

a = u'1.34' 
a_float = float(a) 
type(a_float) 
>> <type 'float'> 

Однако, учитывая, что DecimalField использует Питоны decimal типа внутренне и отличается от питонов float, который используется FloatField.

Decimal Type Подробнее здесь о десятичном типе.

+0

Моя проблема в том, что некоторая область идет как None, тогда она не может конвертироваться в float. Как сделать None равным 0 – user1958218

+0

Тогда вам придется переопределить ваши 'clean()' или 'is_valid()' или установите его в '0', как этот' form.data ['area'] = 0'. –

0

Форма представления являются строки (за исключением, когда файлы загружаются, я думаю.) В Django форма автоматически преобразуется в соответствующий тип Python, если форма действительна (как удобно!) Вы получаете доступ к данным с помощью vi cleaned_data (см Processing the data from the form.)

В этом случае, вы могли бы сделать что-то вроде:

if form.is_valid(): 
    # Form is valid, so do stuff with the form data 
    # e.g. send email, save to DB etc. 
    area = form.cleaned_data['area'] 
    # more code here 
+0

Есть ли способ ввести строку строкового или unicode для float или decimal, потому что я не используя очищенные данные – user1958218

0

вы можете использовать это с переменной, содержащей вас г данные. {variable | Floatformat} Я использовал это в шаблонах. Может быть, это может помочь. :)