Kaydet (Commit) fdccc025 authored tarafından Akshesh's avatar Akshesh Kaydeden (comit) Tim Graham

Fixed #26219 -- Fixed crash when filtering by Decimal in RawQuery.

üst 88034c99
...@@ -486,7 +486,7 @@ class BaseDatabaseOperations(object): ...@@ -486,7 +486,7 @@ class BaseDatabaseOperations(object):
raise ValueError("Django does not support timezone-aware times.") raise ValueError("Django does not support timezone-aware times.")
return six.text_type(value) 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 Transforms a decimal.Decimal value to an object compatible with what is
expected by the backend driver for decimal (numeric) columns. expected by the backend driver for decimal (numeric) columns.
......
...@@ -31,3 +31,6 @@ Bugfixes ...@@ -31,3 +31,6 @@ Bugfixes
* Fixed :class:`~django.contrib.postgres.fields.RangeField` and * Fixed :class:`~django.contrib.postgres.fields.RangeField` and
:class:`~django.contrib.postgres.fields.ArrayField` serialization with :class:`~django.contrib.postgres.fields.ArrayField` serialization with
``None`` values (:ticket:`26215`). ``None`` values (:ticket:`26215`).
* Fixed a crash when filtering by a ``Decimal`` in ``RawQuery``
(:ticket:`26219`).
...@@ -29,6 +29,7 @@ class BookFkAsPk(models.Model): ...@@ -29,6 +29,7 @@ class BookFkAsPk(models.Model):
class Coffee(models.Model): class Coffee(models.Model):
brand = models.CharField(max_length=255, db_column="name") brand = models.CharField(max_length=255, db_column="name")
price = models.DecimalField(max_digits=10, decimal_places=2, default=0)
class Reviewer(models.Model): class Reviewer(models.Model):
......
from __future__ import unicode_literals from __future__ import unicode_literals
from datetime import date from datetime import date
from decimal import Decimal
from django.db.models.query_utils import InvalidQuery from django.db.models.query_utils import InvalidQuery
from django.test import TestCase, skipUnlessDBFeature from django.test import TestCase, skipUnlessDBFeature
...@@ -307,3 +308,8 @@ class RawQueryTests(TestCase): ...@@ -307,3 +308,8 @@ class RawQueryTests(TestCase):
""" """
b = BookFkAsPk.objects.create(book=self.b1) b = BookFkAsPk.objects.create(book=self.b1)
self.assertEqual(list(BookFkAsPk.objects.raw('SELECT not_the_default FROM raw_query_bookfkaspk')), [b]) 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])
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment