From 4823c7dbb3e6783e6d834a754b86afb82e6d2821 Mon Sep 17 00:00:00 2001 From: Waket Zheng Date: Wed, 19 Nov 2025 18:08:43 +0800 Subject: [PATCH 1/4] fix: sqlite DecimalField filter --- tortoise/expressions.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tortoise/expressions.py b/tortoise/expressions.py index 48f7be555..a05f8ffd4 100644 --- a/tortoise/expressions.py +++ b/tortoise/expressions.py @@ -387,6 +387,7 @@ def _process_filter_kwarg( else: filter_info = model._meta.get_filter(key) + field_object = None if "table" in filter_info: # join the table join = ( @@ -405,7 +406,12 @@ def _process_filter_kwarg( else field_object.to_db_value(value, model) ) op = filter_info["operator"] - criterion = op(table[filter_info.get("source_field", filter_info["field"])], value) + term: Term = table[filter_info.get("source_field", filter_info["field"])] + if func := field_object and field_object.get_for_dialect( + model._meta.db.capabilities.dialect, "function_cast" + ): + term = func(field_object, term) + criterion = op(term, value) return criterion, join def _resolve_regular_kwarg( From b2d151a00f0fcb3f949c4ae2e275bf92b4e83bfc Mon Sep 17 00:00:00 2001 From: Waket Zheng Date: Sun, 23 Nov 2025 23:13:26 +0800 Subject: [PATCH 2/4] tests: add decimal filter cases --- tests/fields/test_decimal.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/fields/test_decimal.py b/tests/fields/test_decimal.py index c0b16b1f2..8fc1c614f 100644 --- a/tests/fields/test_decimal.py +++ b/tests/fields/test_decimal.py @@ -62,6 +62,10 @@ async def test_filter(self): .first() ) self.assertEqual(obj, obj0) + objs = await testmodels.DecimalFields.filter(decimal_nodec__gt=2).all() + self.assertIn(obj, objs) + objs = await testmodels.DecimalFields.filter(decimal_nodec__lt=100).all() + self.assertIn(obj, objs) async def test_f_expression_update(self): obj0 = await testmodels.DecimalFields.create(decimal=Decimal("1.23456"), decimal_nodec=18.7) From 17e2181a170a14a980e252a46edbcdfc3e87a2a4 Mon Sep 17 00:00:00 2001 From: Waket Zheng Date: Tue, 25 Nov 2025 05:14:08 +0800 Subject: [PATCH 3/4] refactor: more readable --- tortoise/expressions.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tortoise/expressions.py b/tortoise/expressions.py index a05f8ffd4..7f69f83e8 100644 --- a/tortoise/expressions.py +++ b/tortoise/expressions.py @@ -407,10 +407,12 @@ def _process_filter_kwarg( ) op = filter_info["operator"] term: Term = table[filter_info.get("source_field", filter_info["field"])] - if func := field_object and field_object.get_for_dialect( - model._meta.db.capabilities.dialect, "function_cast" - ): - term = func(field_object, term) + if field_object is not None: + func = field_object.get_for_dialect( + model._meta.db.capabilities.dialect, "function_cast" + ) + if func is not None: + term = func(field_object, term) criterion = op(term, value) return criterion, join From ed548f66acd21f97cf2dad651cf67505ebc74d73 Mon Sep 17 00:00:00 2001 From: Waket Zheng Date: Tue, 25 Nov 2025 10:09:55 +0800 Subject: [PATCH 4/4] docs: update changelog --- CHANGELOG.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index db52ff277..c07602bf3 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -16,6 +16,10 @@ Added ^^^^^ - Add `create()` method to reverse ForeignKey relations, enabling `parent.children.create()` syntax +Fixed +^^^^^ +- Fix sqlite decimal filter error with `__gt` (#2020) + 0.25 ====