From 64424d1a900786facd2e31fa0eac00ec0db71df0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20=C3=89vrard?= Date: Sat, 13 Dec 2025 14:57:52 +0100 Subject: [PATCH] Use the target id to compute the filter clause of a O2M field compared to None Closes #14373 --- trytond/trytond/model/fields/one2many.py | 2 +- trytond/trytond/tests/test_field_one2many.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/trytond/trytond/model/fields/one2many.py b/trytond/trytond/model/fields/one2many.py index 1c279da6ac..705af2eb65 100644 --- a/trytond/trytond/model/fields/one2many.py +++ b/trytond/trytond/model/fields/one2many.py @@ -358,7 +358,7 @@ class One2Many(Field): if self.filter: query = Target.search( self.filter, order=[], query=True) - where &= origin.in_(query) + where &= target.id.in_(query) query = target.select(origin, where=where) expression = ~table.id.in_(query) else: diff --git a/trytond/trytond/tests/test_field_one2many.py b/trytond/trytond/tests/test_field_one2many.py index 59804b3873..b36f8f5e7f 100644 --- a/trytond/trytond/tests/test_field_one2many.py +++ b/trytond/trytond/tests/test_field_one2many.py @@ -611,6 +611,21 @@ class FieldOne2ManyTestCase( self.assertEqual(len(filtered.targets), 4) self.assertEqual(filtered_target.value, 3) + @with_transaction() + def test_search_equals_filter(self): + "Test search one2many equals with filter" + One2Many = Pool().get('test.one2many_filter') + one2many, = One2Many.create([{ + 'targets': [('create', [{'value': 3}])], + }]) + + one2manys = One2Many.search([('targets', '=', None)]) + one2manys_filtered = One2Many.search( + [('filtered_targets', '=', None)]) + + self.assertListEqual(one2manys, []) + self.assertListEqual(one2manys_filtered, []) + @with_transaction() def test_search_non_equals_filter(self): "Test search one2many non equals with filter"