Skip to content

Commit

Permalink
Fixed #7064: Made DemicmalField validation support max_digits equal t…
Browse files Browse the repository at this point in the history
…o decimal_places.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@9387 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
kmtracey committed Nov 10, 2008
1 parent 8cdc53a commit d82aaef
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 12 deletions.
10 changes: 5 additions & 5 deletions django/forms/fields.py
Expand Up @@ -254,12 +254,12 @@ def clean(self, value):
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:
Expand Down
15 changes: 8 additions & 7 deletions tests/regressiontests/forms/fields.py
Expand Up @@ -366,7 +366,7 @@
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.']
Expand Down Expand Up @@ -416,19 +416,20 @@
# 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 ###################################################################
Expand Down

0 comments on commit d82aaef

Please sign in to comment.