From 6a0333ce0ac7fc50c4c65828e213ca29b4162f0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominic=20K=C3=B6nig?= Date: Mon, 12 Jan 2026 21:35:26 +0100 Subject: [PATCH 1/2] Do not filter_in callables for date/time values --- pydal/objects.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pydal/objects.py b/pydal/objects.py index 3b70461f1..25f54d24f 100644 --- a/pydal/objects.py +++ b/pydal/objects.py @@ -903,7 +903,7 @@ def _filter_fields_for_operation(self, fields): for name in list(input_fieldnames & table_fieldnames): field = getattr(self, name) value = fields[name] - if field.filter_in and not isinstance(value, Expression): + if field.filter_in and not isinstance(value, Expression) and not callable(value): value = field.filter_in(value) new_fields[name] = (field, value) del empty_fieldnames[name] From b7553fc4b8eecae6e528b089dea12450b802d951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominic=20K=C3=B6nig?= Date: Mon, 12 Jan 2026 22:07:19 +0100 Subject: [PATCH 2/2] Better solution: do filter_in the output of a callable, but call it first --- pydal/objects.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pydal/objects.py b/pydal/objects.py index 25f54d24f..a46a72384 100644 --- a/pydal/objects.py +++ b/pydal/objects.py @@ -903,7 +903,9 @@ def _filter_fields_for_operation(self, fields): for name in list(input_fieldnames & table_fieldnames): field = getattr(self, name) value = fields[name] - if field.filter_in and not isinstance(value, Expression) and not callable(value): + if field.filter_in and not isinstance(value, Expression): + if callable(value): + value = value() value = field.filter_in(value) new_fields[name] = (field, value) del empty_fieldnames[name]