summaryrefslogtreecommitdiff
path: root/django/db
diff options
context:
space:
mode:
authorVIZZARD-X <vigneshanandmay13@gmail.com>2026-01-16 19:01:23 +0530
committerJacob Walls <jacobtylerwalls@gmail.com>2026-01-20 10:42:28 -0500
commite083c62f51f408aaacbf55684daf83c78d0d1bc1 (patch)
tree4d681dee94e4f61e0979498739aad9da924a92da /django/db
parente5cbb8b4be04797deedc775a5143b5035e7dd3b7 (diff)
Fixed #36030 -- Fixed precision loss in division of Decimal literals on SQLite.
Thanks Bob Kline for the review.
Diffstat (limited to 'django/db')
-rw-r--r--django/db/models/expressions.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/django/db/models/expressions.py b/django/db/models/expressions.py
index 6b90a42cf1..baa91cc2c1 100644
--- a/django/db/models/expressions.py
+++ b/django/db/models/expressions.py
@@ -1141,7 +1141,7 @@ class Func(SQLiteNumericMixin, Expression):
@deconstructible(path="django.db.models.Value")
-class Value(SQLiteNumericMixin, Expression):
+class Value(Expression):
"""Represent a wrapped value as a node within an expression."""
# Provide a default value for `for_save` in order to allow unresolved
@@ -1182,6 +1182,18 @@ class Value(SQLiteNumericMixin, Expression):
return "NULL", []
return "%s", [val]
+ def as_sqlite(self, compiler, connection, **extra_context):
+ sql, params = self.as_sql(compiler, connection, **extra_context)
+ try:
+ if self.output_field.get_internal_type() == "DecimalField":
+ if isinstance(self.value, Decimal):
+ sql = "(CAST(%s AS REAL))" % sql
+ else:
+ sql = "(CAST(%s AS NUMERIC))" % sql
+ except FieldError:
+ pass
+ return sql, params
+
def resolve_expression(
self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False
):