summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Sanders <shang.xiao.sanders@gmail.com>2023-05-24 18:59:55 +1000
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-05-24 11:00:21 +0200
commit91f8df5c2e711ff4b3d10602181d8a6daa62a93a (patch)
tree97d2db6a4ed429033afb2826fa9a81e2317df1d2
parenta44e974412e1f1172fd3948cdaf03eb2f79cf693 (diff)
[4.2.x] Fixed #34590 -- Reverted "Refs #33308 -- Improved adapting DecimalField values to decimal."
This reverts 7990d254b0af158baf827fafbd90fe8e890f23bd. Thanks Marc Odermatt for the report. Backport of 0c1518ee429b01c145cf5b34eab01b0b92f8c246 from main
-rw-r--r--django/db/models/fields/__init__.py6
-rw-r--r--docs/releases/4.2.2.txt4
-rw-r--r--tests/model_fields/test_decimalfield.py5
3 files changed, 10 insertions, 5 deletions
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 060e1be605..b65948d783 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -1753,13 +1753,11 @@ class DecimalField(Field):
)
return decimal_value
- def get_db_prep_value(self, value, connection, prepared=False):
- if not prepared:
- value = self.get_prep_value(value)
+ def get_db_prep_save(self, value, connection):
if hasattr(value, "as_sql"):
return value
return connection.ops.adapt_decimalfield_value(
- value, self.max_digits, self.decimal_places
+ self.to_python(value), self.max_digits, self.decimal_places
)
def get_prep_value(self, value):
diff --git a/docs/releases/4.2.2.txt b/docs/releases/4.2.2.txt
index df3f2a2710..fef5d8d364 100644
--- a/docs/releases/4.2.2.txt
+++ b/docs/releases/4.2.2.txt
@@ -36,3 +36,7 @@ Bugfixes
* Fixed a regression in Django 4.2 that caused a crash of
``QuerySet.aggregate()`` with aggregates referencing subqueries
(:ticket:`34551`).
+
+* Fixed a regression in Django 4.2 that caused a crash of querysets on SQLite
+ when filtering on ``DecimalField`` against values outside of the defined
+ range (:ticket:`34590`).
diff --git a/tests/model_fields/test_decimalfield.py b/tests/model_fields/test_decimalfield.py
index 88c6878f59..588bb64a3a 100644
--- a/tests/model_fields/test_decimalfield.py
+++ b/tests/model_fields/test_decimalfield.py
@@ -91,7 +91,10 @@ class DecimalFieldTests(TestCase):
Really big values can be used in a filter statement.
"""
# This should not crash.
- Foo.objects.filter(d__gte=100000000000)
+ self.assertSequenceEqual(Foo.objects.filter(d__gte=100000000000), [])
+
+ def test_lookup_decimal_larger_than_max_digits(self):
+ self.assertSequenceEqual(Foo.objects.filter(d__lte=Decimal("123456")), [])
def test_max_digits_validation(self):
field = models.DecimalField(max_digits=2)