diff options
| author | VIZZARD-X <vigneshanandmay13@gmail.com> | 2026-01-16 19:01:23 +0530 |
|---|---|---|
| committer | Jacob Walls <jacobtylerwalls@gmail.com> | 2026-01-20 10:42:28 -0500 |
| commit | e083c62f51f408aaacbf55684daf83c78d0d1bc1 (patch) | |
| tree | 4d681dee94e4f61e0979498739aad9da924a92da /django/db | |
| parent | e5cbb8b4be04797deedc775a5143b5035e7dd3b7 (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.py | 14 |
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 ): |
