diff --git a/src/datasource_sqlalchemy/forestadmin/datasource_sqlalchemy/collections.py b/src/datasource_sqlalchemy/forestadmin/datasource_sqlalchemy/collections.py index 8b6f90b87..82e18b499 100644 --- a/src/datasource_sqlalchemy/forestadmin/datasource_sqlalchemy/collections.py +++ b/src/datasource_sqlalchemy/forestadmin/datasource_sqlalchemy/collections.py @@ -31,6 +31,7 @@ from forestadmin.datasource_toolkit.interfaces.query.filter.unpaginated import Filter from forestadmin.datasource_toolkit.interfaces.query.projections import Projection from forestadmin.datasource_toolkit.interfaces.records import RecordsDataAlias +from forestadmin.datasource_toolkit.utils.collections import CollectionUtils from sqlalchemy import Table from sqlalchemy import column as SqlAlchemyColumn from sqlalchemy import text @@ -207,7 +208,7 @@ async def update(self, caller: User, filter_: Optional[Filter], patch: RecordsDa def _cast_condition_tree(self, tree: ConditionTree) -> ConditionTree: if isinstance(tree, ConditionTreeLeaf): - if cast(Column, self.schema["fields"][tree.field])["column_type"] == PrimitiveType.DATE: + if cast(Column, CollectionUtils.get_field_schema(self, tree.field))["column_type"] == PrimitiveType.DATE: iso_format = tree.value if isinstance(iso_format, str): if iso_format[-1] == "Z": diff --git a/src/datasource_sqlalchemy/tests/test_sqlalchemy_collections.py b/src/datasource_sqlalchemy/tests/test_sqlalchemy_collections.py index 3cb794b98..7397a5455 100644 --- a/src/datasource_sqlalchemy/tests/test_sqlalchemy_collections.py +++ b/src/datasource_sqlalchemy/tests/test_sqlalchemy_collections.py @@ -243,6 +243,17 @@ def test_list_filter_in_and_not_in_with_null_in_values_should_work(self): self.assertEqual(len(results), 1) self.assertEqual(results[0]["id"], 1) + def test_list_filter_relation(self): + collection = self.datasource.get_collection("order") + filter_ = PaginatedFilter({"condition_tree": ConditionTreeLeaf("customer:id", Operator.IN, [1, None])}) + + results = self.loop.run_until_complete( + collection.list(self.mocked_caller, filter_, Projection("id", "customer:id")) + ) + + self.assertEqual(len(results), 1) + self.assertEqual(results[0]["customer"]["id"], 1) + def test_create(self): order = { "id": 11,