Fixed #5232 -- Fixed the validation of `DecimalField` so that the negative sign is not counted as a digit. Thanks, Andrew Durdin.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@6067 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
ef088d5f36
commit
7e57576ff7
|
@ -423,7 +423,7 @@ class IsValidDecimal(object):
|
|||
except DecimalException:
|
||||
raise ValidationError, _("Please enter a valid decimal number.")
|
||||
|
||||
pieces = str(val).split('.')
|
||||
pieces = str(val).lstrip("-").split('.')
|
||||
decimals = (len(pieces) == 2) and len(pieces[1]) or 0
|
||||
digits = len(pieces[0])
|
||||
|
||||
|
|
|
@ -190,7 +190,7 @@ class DecimalField(Field):
|
|||
value = Decimal(value)
|
||||
except DecimalException:
|
||||
raise ValidationError(ugettext('Enter a number.'))
|
||||
pieces = str(value).split('.')
|
||||
pieces = str(value).lstrip("-").split('.')
|
||||
decimals = (len(pieces) == 2) and len(pieces[1]) or 0
|
||||
digits = len(pieces[0])
|
||||
if self.max_value is not None and value > self.max_value:
|
||||
|
|
|
@ -1167,6 +1167,31 @@ ValidationError: [u'Ensure that there are no more than 2 decimal places.']
|
|||
Traceback (most recent call last):
|
||||
...
|
||||
ValidationError: [u'Ensure that there are no more than 2 digits before the decimal point.']
|
||||
>>> f.clean('-12.34')
|
||||
Decimal("-12.34")
|
||||
>>> f.clean('-123.45')
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValidationError: [u'Ensure that there are no more than 4 digits in total.']
|
||||
>>> f.clean('-.12')
|
||||
Decimal("-0.12")
|
||||
>>> f.clean('-00.12')
|
||||
Decimal("-0.12")
|
||||
>>> f.clean('-000.12')
|
||||
Decimal("-0.12")
|
||||
>>> f.clean('-000.123')
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValidationError: [u'Ensure that there are no more than 2 decimal places.']
|
||||
>>> f.clean('-000.1234')
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValidationError: [u'Ensure that there are no more than 4 digits in total.']
|
||||
>>> f.clean('--0.12')
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValidationError: [u'Enter a number.']
|
||||
|
||||
>>> f = DecimalField(max_digits=4, decimal_places=2, required=False)
|
||||
>>> f.clean('')
|
||||
|
||||
|
|
Loading…
Reference in New Issue