#32949: decimal.InvalidOperation error on DecimalField form field
---------------------------------+------------------------------------
Reporter: yakimka | Owner: nobody
Type: Bug | Status: new
Component: Forms | Version: 3.2
Severity: Release blocker | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 1
Needs tests: 0 | Patch needs improvement: 1
Easy pickings: 0 | UI/UX: 0
---------------------------------+------------------------------------
Changes (by Carlton Gibson):
* needs_better_patch: 0 => 1
* stage: Unreviewed => Accepted
* severity: Normal => Release blocker
* needs_docs: 0 => 1
Comment:
Thanks for the report.
This is a regression in cc3d24d7d577f174937a0744d886c4c7123cfa85.
The #7777 originally added handling of `NaN` and `Inf` in `DecimalField`
(in 692fd7da5e5bfe1533c40f94999ea42f9b986356).
It looked redundant but wasn't because `MaxValueValidator` does not handle
`Decimal('NaN')`.
Here's a minimal diff showing that:
{{{
diff --git a/tests/validators/tests.py b/tests/validators/tests.py
index e39d0e3a1c..42665c6ccb 100644
--- a/tests/validators/tests.py
+++ b/tests/validators/tests.py
@@ -214,6 +214,7 @@ TEST_DATA = [
(MaxValueValidator(0), 1, ValidationError),
(MaxValueValidator(NOW), NOW + timedelta(days=1), ValidationError),
+ (MaxValueValidator(Decimal('NaN')), 1, ValidationError),
(MinValueValidator(-10), -10, None),
(MinValueValidator(-10), 10, None),
}}}
Results in:
{{{
======================================================================
ERROR: test_validators (validators.tests.TestValidators)
[MaxValueValidator] (value=1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "...django/tests/validators/tests.py", line 355, in test_validators
validator(value)
File "...django/django/core/validators.py", line 358, in __call__
if self.compare(cleaned, limit_value):
File "...django/django/core/validators.py", line 383, in compare
return a > b
decimal.InvalidOperation: [<class 'decimal.InvalidOperation'>]
}}}
You PR here should (partially?) revert
cc3d24d7d577f174937a0744d886c4c7123cfa85 (see #31806 and
[https://github.com/django/django/pull/13212/ the PR for discussion and
related commits]).
Add `max_value` to the existing `test_enter_a_numer_error()` case:
{{{
diff --git a/tests/forms_tests/field_tests/test_decimalfield.py
b/tests/forms_tests/field_tests/test_decimalfield.py
index c8b044722e..04c555c4ad 100644
--- a/tests/forms_tests/field_tests/test_decimalfield.py
+++ b/tests/forms_tests/field_tests/test_decimalfield.py
@@ -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 = (
}}}
It looks as if test `test_value_placeholder_with_decimal_field
(forms_tests.tests.test_validators.ValidatorCustomMessageTests)` will need
adjusting.
A release note in 3.2.6.txt will be needed.
Good spot.
--
Ticket URL: <https://code.djangoproject.com/ticket/32949#comment:2>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/065.035b1a15efc961cd3a6063cf5cef29ee%40djangoproject.com.