From 121b8e6800498fa8939282ad1dd2db258a0b06b5 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Thu, 19 Feb 2015 15:09:49 +0100 Subject: [PATCH] [FIX] models: in onchange, false changes where detected in many2many fields This was due to secondary fields loaded from database in 'onchange' mode. In that mode, the secondary fields were marked 'dirty', and therefore returned by the method `onchange`. The fix consists in loading those secondary fields in cache before processing the onchanges. This incidentally fixes a test on method `onchange`: in a one2many field, some dirty fields were unexpectedly returned in the result. This was due to those fields being loaded while processing onchanges. --- openerp/addons/test_new_api/tests/test_onchange.py | 2 -- openerp/models.py | 5 +++++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/openerp/addons/test_new_api/tests/test_onchange.py b/openerp/addons/test_new_api/tests/test_onchange.py index e9b7e1f83aa..3d0745a5f8b 100644 --- a/openerp/addons/test_new_api/tests/test_onchange.py +++ b/openerp/addons/test_new_api/tests/test_onchange.py @@ -146,8 +146,6 @@ class TestOnChange(common.TransactionCase): }), (1, message.id, { 'name': "[%s] %s" % ("Foo", USER.name), - # Note: size is computed because it was not provided beforehand - 'size': len(BODY), }), ]) diff --git a/openerp/models.py b/openerp/models.py index 3a8cb88423e..7dd628054a1 100644 --- a/openerp/models.py +++ b/openerp/models.py @@ -5787,6 +5787,11 @@ class BaseModel(object): # attach `self` with a different context (for cache consistency) record._origin = self.with_context(__onchange=True) + # load fields on secondary records, to avoid false changes + with env.do_in_onchange(): + for field_seq in secondary: + record.mapped(field_seq) + # determine which field(s) should be triggered an onchange todo = list(names) or list(values) done = set()