diff --git a/django/db/backends/base/operations.py b/django/db/backends/base/operations.py index d68a5aa996..e7ecbca4e4 100644 --- a/django/db/backends/base/operations.py +++ b/django/db/backends/base/operations.py @@ -486,7 +486,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 015a58c287..5133ae5b55 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 @@ -307,3 +308,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])