Как заставить Min / MaxValueValidator работать с Django DecimalField? - PullRequest
0 голосов
/ 12 октября 2018

В Django 2.1.2 (Python 3.7.0) возникает странная ошибка:

from django.db.models import DecimalField
from django.core.validators import MaxValueValidator, MinValueValidator
f = DecimalField(max_digits=4, decimal_places=2, validators=[MinValueValidator(10), MaxValueValidator(20)])

Это ожидаемое поведение:

>>> f.clean(15, model_instance=None)
Decimal('15')
>>> f.clean('15', model_instance=None)
Decimal('15')

Но это не такработа:

>>> f.clean(5, model_instance=None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/.../anaconda3/envs/django/lib/python3.7/site-packages/django/db/models/fields/__init__.py", line 632, in clean
    self.run_validators(value)
  File "/Users/.../anaconda3/envs/django/lib/python3.7/site-packages/django/db/models/fields/__init__.py", line 591, in run_validators
    raise exceptions.ValidationError(errors)
django.core.exceptions.ValidationError: <exception str() failed>

Та же ошибка для:

>>> f.clean('5', model_instance=None)
>>> f.clean(25, model_instance=None)

Что я делаю не так?

Примечание: я знаю, как проверить это поле вручную в ModelForm,но я бы предпочел избежать обходного пути.Я проверил некоторые связанные ответы безуспешно:

...