mirror of
https://github.com/django/django.git
synced 2025-03-31 19:46:42 +00:00
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 cc3d24d7d577f174937a0744d886c4c7123cfa85.
This commit is contained in:
parent
fd999318ad
commit
c542d0a072
@ -349,6 +349,17 @@ class DecimalField(IntegerField):
|
|||||||
raise ValidationError(self.error_messages['invalid'], code='invalid')
|
raise ValidationError(self.error_messages['invalid'], code='invalid')
|
||||||
return value
|
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):
|
def widget_attrs(self, widget):
|
||||||
attrs = super().widget_attrs(widget)
|
attrs = super().widget_attrs(widget)
|
||||||
if isinstance(widget, NumberInput) and 'step' not in widget.attrs:
|
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
|
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)
|
self.assertIsNone(f.min_value)
|
||||||
|
|
||||||
def test_enter_a_number_error(self):
|
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 = (
|
values = (
|
||||||
'-NaN', 'NaN', '+NaN',
|
'-NaN', 'NaN', '+NaN',
|
||||||
'-sNaN', 'sNaN', '+sNaN',
|
'-sNaN', 'sNaN', '+sNaN',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user