Fixed #32949 -- Restored invalid number handling in DecimalField.validate().
DecimalField must itself validate() values, such as NaN, which cannot be
passed to validators, such as MaxValueValidator, during the
run_validators() phase.
Regression in cc3d24d7d5
.
This commit is contained in:
parent
fd999318ad
commit
c542d0a072
|
@ -349,6 +349,17 @@ class DecimalField(IntegerField):
|
|||
raise ValidationError(self.error_messages['invalid'], code='invalid')
|
||||
return value
|
||||
|
||||
def validate(self, value):
|
||||
super().validate(value)
|
||||
if value in self.empty_values:
|
||||
return
|
||||
if not value.is_finite():
|
||||
raise ValidationError(
|
||||
self.error_messages['invalid'],
|
||||
code='invalid',
|
||||
params={'value': value},
|
||||
)
|
||||
|
||||
def widget_attrs(self, widget):
|
||||
attrs = super().widget_attrs(widget)
|
||||
if isinstance(widget, NumberInput) and 'step' not in widget.attrs:
|
||||
|
|
|
@ -9,4 +9,6 @@ Django 3.2.6 fixes several bugs in 3.2.5.
|
|||
Bugfixes
|
||||
========
|
||||
|
||||
* ...
|
||||
* Fixed a regression in Django 3.2 that caused a crash validating ``"NaN"``
|
||||
input with a ``forms.DecimalField`` that had a specified ``max_value``
|
||||
(:ticket:`32949`).
|
||||
|
|
|
@ -49,7 +49,7 @@ class DecimalFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
|||
self.assertIsNone(f.min_value)
|
||||
|
||||
def test_enter_a_number_error(self):
|
||||
f = DecimalField(max_digits=4, decimal_places=2)
|
||||
f = DecimalField(max_value=1, max_digits=4, decimal_places=2)
|
||||
values = (
|
||||
'-NaN', 'NaN', '+NaN',
|
||||
'-sNaN', 'sNaN', '+sNaN',
|
||||
|
|
Loading…
Reference in New Issue