From 134638176080eba48b9b3a2e484bfee1cb8beaec Mon Sep 17 00:00:00 2001 From: yakimka Date: Thu, 15 Jul 2021 21:27:59 +0300 Subject: [3.2.x] 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. Backport of c542d0a07237033225c1d57337ca9474a00648f2 from main --- django/forms/fields.py | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'django/forms') diff --git a/django/forms/fields.py b/django/forms/fields.py index 17c7956b53..0214d60c1c 100644 --- a/django/forms/fields.py +++ b/django/forms/fields.py @@ -350,6 +350,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: -- cgit v1.3