Fixed #4485 -- Allow nullable DecimalFields to store NULLs.

Based on a patch from tdterry. Thanks.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@7797 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Malcolm Tredinnick 2008-06-30 10:07:06 +00:00
parent a254f125ff
commit 52cc11c4e2
2 changed files with 19 additions and 3 deletions

View File

@ -695,7 +695,7 @@ class DecimalField(Field):
_("This value must be a decimal number.")) _("This value must be a decimal number."))
def _format(self, value): def _format(self, value):
if isinstance(value, basestring): if isinstance(value, basestring) or value is None:
return value return value
else: else:
return self.format_number(value) return self.format_number(value)
@ -716,7 +716,6 @@ class DecimalField(Field):
return u"%.*f" % (self.decimal_places, value) return u"%.*f" % (self.decimal_places, value)
def get_db_prep_save(self, value): def get_db_prep_save(self, value):
if value is not None:
value = self._format(value) value = self._format(value)
return super(DecimalField, self).get_db_prep_save(value) return super(DecimalField, self).get_db_prep_save(value)

View File

@ -15,4 +15,21 @@ Decimal("3.14")
Traceback (most recent call last): Traceback (most recent call last):
... ...
ValidationError: [u'This value must be a decimal number.'] ValidationError: [u'This value must be a decimal number.']
>>> f = DecimalField(max_digits=5, decimal_places=1)
>>> x = f.to_python(2)
>>> y = f.to_python('2.6')
>>> f.get_db_prep_save(x)
u'2.0'
>>> f.get_db_prep_save(y)
u'2.6'
>>> f.get_db_prep_save(None)
>>> f.get_db_prep_lookup('exact', x)
[u'2.0']
>>> f.get_db_prep_lookup('exact', y)
[u'2.6']
>>> f.get_db_prep_lookup('exact', None)
[None]
""" """