summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaren Tracey <kmtracey@gmail.com>2008-11-10 19:52:53 +0000
committerKaren Tracey <kmtracey@gmail.com>2008-11-10 19:52:53 +0000
commitd82aaef8446c4188a27ba4347b75f0dffaa42f0a (patch)
tree1a347c0fcf83f95b4dfe2bbcf82fa7ac83c87dc1
parent8cdc53a265cfbf72ae87aa607a95f4a7eb9a3ac3 (diff)
Fixed #7064: Made DemicmalField validation support max_digits equal to decimal_places.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@9387 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/forms/fields.py10
-rw-r--r--tests/regressiontests/forms/fields.py15
2 files changed, 13 insertions, 12 deletions
diff --git a/django/forms/fields.py b/django/forms/fields.py
index 836cd5d33c..ccb54d8b32 100644
--- a/django/forms/fields.py
+++ b/django/forms/fields.py
@@ -254,12 +254,12 @@ class DecimalField(Field):
decimals = abs(exponent)
# digittuple doesn't include any leading zeros.
digits = len(digittuple)
- if decimals >= digits:
+ if decimals > digits:
# We have leading zeros up to or past the decimal point. Count
- # everything past the decimal point as a digit. We also add one
- # for leading zeros before the decimal point (any number of leading
- # whole zeros collapse to one digit).
- digits = decimals + 1
+ # everything past the decimal point as a digit. We do not count
+ # 0 before the decimal point as a digit since that would mean
+ # we would not allow max_digits = decimal_places.
+ digits = decimals
whole_digits = digits - decimals
if self.max_value is not None and value > self.max_value:
diff --git a/tests/regressiontests/forms/fields.py b/tests/regressiontests/forms/fields.py
index f31ea6fa20..1b5d7a3b68 100644
--- a/tests/regressiontests/forms/fields.py
+++ b/tests/regressiontests/forms/fields.py
@@ -366,7 +366,7 @@ True
Traceback (most recent call last):
...
ValidationError: [u'Ensure that there are no more than 2 decimal places.']
->>> f.clean('-000.1234')
+>>> f.clean('-000.12345')
Traceback (most recent call last):
...
ValidationError: [u'Ensure that there are no more than 4 digits in total.']
@@ -416,19 +416,20 @@ ValidationError: [u'Ensure that there are no more than 2 decimal places.']
# Leading whole zeros "collapse" to one digit.
>>> f.clean('0000000.10') == Decimal("0.1")
True
->>> f.clean('0000000.100')
-Traceback (most recent call last):
-...
-ValidationError: [u'Ensure that there are no more than 3 digits in total.']
+
+# But a leading 0 before the . doesn't count towards max_digits
+>>> f.clean('0000000.100') == Decimal("0.100")
+True
# Only leading whole zeros "collapse" to one digit.
>>> f.clean('000000.02') == Decimal('0.02')
True
->>> f.clean('000000.002')
+>>> f.clean('000000.0002')
Traceback (most recent call last):
...
ValidationError: [u'Ensure that there are no more than 3 digits in total.']
-
+>>> f.clean('.002') == Decimal("0.002")
+True
# DateField ###################################################################