1
0
mirror of https://github.com/django/django.git synced 2025-02-28 19:44:35 +00:00

[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
This commit is contained in:
David Sanders 2023-05-24 18:59:55 +10:00 committed by Mariusz Felisiak
parent a44e974412
commit 91f8df5c2e
3 changed files with 10 additions and 5 deletions

View File

@ -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):

View File

@ -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`).

View File

@ -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)