Джанго странная проверка DecimalField - PullRequest
0 голосов
/ 18 сентября 2018

Я получил ошибку проверки, когда она не должна возникать.Вот пример:

from django.db.models import DecimalField

f = DecimalField(max_digits=9, decimal_places=3)

# got validation error here
# `Ensure that there are no more than 3 decimal places`
f.clean(value=12.123, model_instance=None)

# returns Decimal('12.1230000')
f.to_python(12.123)

# this is absolutely fine
f.clean(value=123456.123, model_instance=None)

# returns Decimal('123456.123')
f.to_python(123456.123)

По-видимому, Django DecimalField использует неправильную реализацию to_python, которая возвращает чрезмерное количество конечных нулей в конце, а затем проверка завершается неудачей.

Что с этим можно сделать?

1 Ответ

0 голосов
/ 18 сентября 2018

Вы должны передавать значения в виде строки, а не с плавающей точкой.Проверьте это

from django.db.models import DecimalField

f = DecimalField(max_digits=9, decimal_places=3)
f.clean(value="12.123", model_instance=None)
f.to_python("12.123")
f.clean(value="123456.123", model_instance=None)
f.to_python("123456.123")
...