summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-07-30 00:18:49 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-07-30 00:18:49 +0000
commit281f2b74bf19161a0dc5791a07d239ce6a27ed2f (patch)
tree1c37103e4c6bd691c9d564231222e412ad7a6d26
parent1ba2d6888f78ddd280d5882cd31e7253ef143cbc (diff)
Fixed #8023 -- Allow filtering of DecimalFields (in models) using strings.
At the same time, checked all other cases of db_prep_value() to ensure they aren't making the same mistake. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8143 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/models/fields/__init__.py4
-rw-r--r--tests/regressiontests/model_fields/models.py17
2 files changed, 16 insertions, 5 deletions
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 157c40e832..09d13c417c 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -732,8 +732,8 @@ class DecimalField(Field):
return util.format_number(value, self.max_digits, self.decimal_places)
def get_db_prep_value(self, value):
- return connection.ops.value_to_db_decimal(value, self.max_digits,
- self.decimal_places)
+ return connection.ops.value_to_db_decimal(self.to_python(value),
+ self.max_digits, self.decimal_places)
def get_manipulator_field_objs(self):
return [curry(oldforms.DecimalField, max_digits=self.max_digits, decimal_places=self.decimal_places)]
diff --git a/tests/regressiontests/model_fields/models.py b/tests/regressiontests/model_fields/models.py
index 790bc5010e..455e2b3ded 100644
--- a/tests/regressiontests/model_fields/models.py
+++ b/tests/regressiontests/model_fields/models.py
@@ -1,8 +1,14 @@
from django.db import models
+try:
+ import decimal
+except ImportError:
+ from django.utils import _decimal as decimal # Python 2.3 fallback
+
class Foo(models.Model):
a = models.CharField(max_length=10)
+ d = models.DecimalField(max_digits=5, decimal_places=3)
def get_foo():
return Foo.objects.get(id=1)
@@ -22,14 +28,14 @@ class Whiz(models.Model):
(3,'Third'),
(4,'Fourth'),
)
- ),
+ ),
(0,'Other'),
)
c = models.IntegerField(choices=CHOICES, null=True)
-
+
__test__ = {'API_TESTS':"""
# Create a couple of Places.
->>> f = Foo.objects.create(a='abc')
+>>> f = Foo.objects.create(a='abc', d=decimal.Decimal("12.34"))
>>> f.id
1
>>> b = Bar(b = "bcd")
@@ -67,5 +73,10 @@ None
>>> w.get_c_display()
u''
+# Regression test for #8023: should be able to filter decimal fields using
+# strings (which is what gets passed through from, e.g., the admin interface).
+>>> Foo.objects.filter(d=u'1.23')
+[]
+
"""}