diff --git a/odoo/addons/test_new_api/tests/test_new_fields.py b/odoo/addons/test_new_api/tests/test_new_fields.py index b1b175a0435..04529592445 100644 --- a/odoo/addons/test_new_api/tests/test_new_fields.py +++ b/odoo/addons/test_new_api/tests/test_new_fields.py @@ -2125,6 +2125,34 @@ class TestFields(TransactionCaseWithUserDemo): moves = self.env['test_new_api.move'].search([('line_ids', 'in', line.id)]) self.assertEqual(moves, move2) + def test_73_relational_inverse(self): + """ Check the consistency of relational fields with inverse(s). """ + discussion1, discussion2 = self.env['test_new_api.discussion'].create([ + {'name': "discussion1"}, {'name': "discussion2"}, + ]) + category1, category2 = self.env['test_new_api.category'].create([ + {'name': "category1"}, {'name': "category2"}, + ]) + + # assumption: category12 and category21 are in different order, but are + # in the same order when put in a set() + category12 = category1 + category2 + category21 = category2 + category1 + self.assertNotEqual(category12.ids, category21.ids) + self.assertEqual(list(set(category12.ids)), list(set(category21.ids))) + + # make sure discussion1.categories is in cache; the write() below should + # update the cache of discussion1.categories by appending category12.ids + discussion1.categories + category12.write({'discussions': [Command.link(discussion1.id)]}) + self.assertEqual(discussion1.categories.ids, category12.ids) + + # make sure discussion2.categories is in cache; the write() below should + # update the cache of discussion2.categories by appending category21.ids + discussion2.categories + category21.write({'discussions': [Command.link(discussion2.id)]}) + self.assertEqual(discussion2.categories.ids, category21.ids) + def test_80_copy(self): Translations = self.env['ir.translation'] discussion = self.env.ref('test_new_api.discussion_0') diff --git a/odoo/fields.py b/odoo/fields.py index 85eb6f94a1b..1f777e6c548 100644 --- a/odoo/fields.py +++ b/odoo/fields.py @@ -3882,7 +3882,7 @@ class Many2many(_RelationalMulti): # determine old and new relation {x: ys} set = OrderedSet - ids = {rid for recs, cs in records_commands_list for rid in recs.ids} + ids = set(rid for recs, cs in records_commands_list for rid in recs.ids) records = model.browse(ids) if self.store: