summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkshesh <aksheshdoshi@gmail.com>2016-02-16 20:33:37 +0530
committerTim Graham <timograham@gmail.com>2016-02-17 14:00:38 -0500
commit0d2b97ca18b576d1bbff2ccb089527e36d99eaf9 (patch)
tree4b6f2d9080212274c386941dc40ad313c796bd71
parent477b82cf8a7eefac98ff4f5afb4754727f4b0004 (diff)
[1.9.x] Fixed #26219 -- Fixed crash when filtering by Decimal in RawQuery.
Backport of fdccc02576ae5a524338f65e629948604d80b4c8 from master
-rw-r--r--django/db/backends/base/operations.py2
-rw-r--r--docs/releases/1.9.3.txt3
-rw-r--r--tests/raw_query/models.py1
-rw-r--r--tests/raw_query/tests.py6
4 files changed, 11 insertions, 1 deletions
diff --git a/django/db/backends/base/operations.py b/django/db/backends/base/operations.py
index 6e5aff19cd..acca12708a 100644
--- a/django/db/backends/base/operations.py
+++ b/django/db/backends/base/operations.py
@@ -485,7 +485,7 @@ class BaseDatabaseOperations(object):
raise ValueError("Django does not support timezone-aware times.")
return six.text_type(value)
- def adapt_decimalfield_value(self, value, max_digits, decimal_places):
+ def adapt_decimalfield_value(self, value, max_digits=None, decimal_places=None):
"""
Transforms a decimal.Decimal value to an object compatible with what is
expected by the backend driver for decimal (numeric) columns.
diff --git a/docs/releases/1.9.3.txt b/docs/releases/1.9.3.txt
index af7bcf21bb..b250bb247e 100644
--- a/docs/releases/1.9.3.txt
+++ b/docs/releases/1.9.3.txt
@@ -31,3 +31,6 @@ Bugfixes
* Fixed :class:`~django.contrib.postgres.fields.RangeField` and
:class:`~django.contrib.postgres.fields.ArrayField` serialization with
``None`` values (:ticket:`26215`).
+
+* Fixed a crash when filtering by a ``Decimal`` in ``RawQuery``
+ (:ticket:`26219`).
diff --git a/tests/raw_query/models.py b/tests/raw_query/models.py
index fd122d4dbe..6e996322cc 100644
--- a/tests/raw_query/models.py
+++ b/tests/raw_query/models.py
@@ -29,6 +29,7 @@ class BookFkAsPk(models.Model):
class Coffee(models.Model):
brand = models.CharField(max_length=255, db_column="name")
+ price = models.DecimalField(max_digits=10, decimal_places=2, default=0)
class Reviewer(models.Model):
diff --git a/tests/raw_query/tests.py b/tests/raw_query/tests.py
index 2f80c23f32..5bda4d76b6 100644
--- a/tests/raw_query/tests.py
+++ b/tests/raw_query/tests.py
@@ -1,6 +1,7 @@
from __future__ import unicode_literals
from datetime import date
+from decimal import Decimal
from django.db.models.query_utils import InvalidQuery
from django.test import TestCase, skipUnlessDBFeature
@@ -306,3 +307,8 @@ class RawQueryTests(TestCase):
"""
b = BookFkAsPk.objects.create(book=self.b1)
self.assertEqual(list(BookFkAsPk.objects.raw('SELECT not_the_default FROM raw_query_bookfkaspk')), [b])
+
+ def test_decimal_parameter(self):
+ c = Coffee.objects.create(brand='starbucks', price=20.5)
+ qs = Coffee.objects.raw("SELECT * FROM raw_query_coffee WHERE price >= %s", params=[Decimal(20)])
+ self.assertEqual(list(qs), [c])