Browse files

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
  • Loading branch information...
1 parent a254f12 commit 52cc11c4e24be0a108d3f778ed546985fc608535 @malcolmt malcolmt committed Jun 30, 2008
Showing with 19 additions and 3 deletions.
  1. +2 −3 django/db/models/fields/__init__.py
  2. +17 −0 tests/regressiontests/model_fields/tests.py
View
5 django/db/models/fields/__init__.py
@@ -695,7 +695,7 @@ def to_python(self, value):
_("This value must be a decimal number."))
def _format(self, value):
- if isinstance(value, basestring):
+ if isinstance(value, basestring) or value is None:
return value
else:
return self.format_number(value)
@@ -716,8 +716,7 @@ def format_number(self, value):
return u"%.*f" % (self.decimal_places, 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)
def get_db_prep_lookup(self, lookup_type, value):
View
17 tests/regressiontests/model_fields/tests.py
@@ -15,4 +15,21 @@
Traceback (most recent call last):
...
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]
+
"""

0 comments on commit 52cc11c

Please sign in to comment.