Fixed #5355 -- Fixed data cleaning for DecimalField.

In passing, fixed a problem with cleaning in IntegerField.

Includes tests from PhiR.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@6282 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Malcolm Tredinnick 2007-09-15 11:45:19 +00:00
parent 7ca1a04633
commit 885db3cb79
2 changed files with 16 additions and 2 deletions

View File

@ -144,7 +144,7 @@ class IntegerField(Field):
if value in EMPTY_VALUES: if value in EMPTY_VALUES:
return None return None
try: try:
value = int(value) value = int(str(value))
except (ValueError, TypeError): except (ValueError, TypeError):
raise ValidationError(ugettext(u'Enter a whole number.')) raise ValidationError(ugettext(u'Enter a whole number.'))
if self.max_value is not None and value > self.max_value: if self.max_value is not None and value > self.max_value:
@ -192,7 +192,7 @@ class DecimalField(Field):
super(DecimalField, self).clean(value) super(DecimalField, self).clean(value)
if not self.required and value in EMPTY_VALUES: if not self.required and value in EMPTY_VALUES:
return None return None
value = value.strip() value = str(value).strip()
try: try:
value = Decimal(value) value = Decimal(value)
except DecimalException: except DecimalException:

View File

@ -961,6 +961,12 @@ True
Traceback (most recent call last): Traceback (most recent call last):
... ...
ValidationError: [u'Enter a whole number.'] ValidationError: [u'Enter a whole number.']
>>> f.clean(42)
42
>>> f.clean(3.14)
Traceback (most recent call last):
...
ValidationError: [u'Enter a whole number.']
>>> f.clean('1 ') >>> f.clean('1 ')
1 1
>>> f.clean(' 1') >>> f.clean(' 1')
@ -1084,6 +1090,10 @@ True
23.0 23.0
>>> f.clean('3.14') >>> f.clean('3.14')
3.1400000000000001 3.1400000000000001
>>> f.clean(3.14)
3.1400000000000001
>>> f.clean(42)
42.0
>>> f.clean('a') >>> f.clean('a')
Traceback (most recent call last): Traceback (most recent call last):
... ...
@ -1142,6 +1152,10 @@ True
Decimal("23") Decimal("23")
>>> f.clean('3.14') >>> f.clean('3.14')
Decimal("3.14") Decimal("3.14")
>>> f.clean(3.14)
Decimal("3.14")
>>> f.clean(Decimal('3.14'))
Decimal("3.14")
>>> f.clean('a') >>> f.clean('a')
Traceback (most recent call last): Traceback (most recent call last):
... ...