Commit fdccc025 authored by Akshesh's avatar Akshesh Committed by Tim Graham
Browse files

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

parent 88034c99
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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.
+3 −0
Original line number Diff line number Diff line
@@ -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`).
+1 −0
Original line number Diff line number Diff line
@@ -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):
+6 −0
Original line number Diff line number Diff line
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])