diff --git a/trytond/CHANGELOG b/trytond/CHANGELOG index 46f6a2d9bd..075d0c08ae 100644 --- a/trytond/CHANGELOG +++ b/trytond/CHANGELOG @@ -1,3 +1,4 @@ +* Do not copy relational fields with filter * Support range functions and operators in EXCLUDE constraint * Add sparkline chart tools * Add setup methods to activate_modules diff --git a/trytond/trytond/model/modelstorage.py b/trytond/trytond/model/modelstorage.py index 28f771d11d..983888d2a0 100644 --- a/trytond/trytond/model/modelstorage.py +++ b/trytond/trytond/model/modelstorage.py @@ -435,14 +435,14 @@ class ModelStorage(Model): except Exception: pass elif ftype in ('one2many',): - if is_readonly(field): + if is_readonly(field) or field.filter: del data[field_name] elif data[field_name]: data[field_name] = [( 'copy', data[field_name], get_default(field_name))] elif ftype == 'many2many': - if is_readonly(field): + if is_readonly(field) or field.filter: del data[field_name] elif data[field_name]: data[field_name] = [('add', data[field_name])] diff --git a/trytond/trytond/tests/test_copy.py b/trytond/trytond/tests/test_copy.py index a954646d1f..8f4a56d6d0 100644 --- a/trytond/trytond/tests/test_copy.py +++ b/trytond/trytond/tests/test_copy.py @@ -110,6 +110,25 @@ class CopyTestCase(TestCase): self.assertEqual(copy.one2many, ()) + @with_transaction() + def test_one2many_filter(self): + "Test not copy one2many with filter" + pool = Pool() + Model = pool.get('test.copy.one2many') + Target = pool.get('test.copy.one2many.target') + + record = Model(name="Test") + record.one2many = [Target(name="Target")] + record.save() + + try: + Model.one2many.filter = [('name', '=', "Target")] + copy, = Model.copy([record]) + + self.assertEqual(copy.one2many, ()) + finally: + Model.one2many.filter = None + @with_transaction() def test_one2many_default(self): "Test copy one2many with default" @@ -191,6 +210,25 @@ class CopyTestCase(TestCase): self.assertEqual(copy.many2many, ()) + @with_transaction() + def test_many2many_filter(self): + "Test not copy many2many with filter" + pool = Pool() + Model = pool.get('test.copy.many2many') + Target = pool.get('test.copy.many2many.target') + + record = Model(name="Test") + record.many2many = [Target(name="Target")] + record.save() + + try: + Model.many2many.filter = [('name', '=', "Target")] + copy, = Model.copy([record]) + + self.assertEqual(copy.many2many, ()) + finally: + Model.many2many.filter = None + @with_transaction() def test_many2many_default(self): "Test copy many2many with default"