From bbdf9605e4c480e1fc19b1faac9cfc4321bcaea2 Mon Sep 17 00:00:00 2001 From: dansanti Date: Tue, 31 May 2016 14:04:54 -0400 Subject: [PATCH] [FIX] openerp: Field One2many child propagation on NewId dict If exist an one2many field as child of another field, this one2many get only empty lines and Javascript dataset set wrong referid, causing a bad query with False values and 'one2many_v_id'$ as inverse_id. This PR adetect on convert_to_change if field is one2many and fnames = None, in case True, set fnames with one2many model's fields This commit closes #12249, closes #11236 Courtsey of @rco-odoo for review --- openerp/addons/test_new_api/tests/test_onchange.py | 7 ++++++- openerp/fields.py | 5 ++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/openerp/addons/test_new_api/tests/test_onchange.py b/openerp/addons/test_new_api/tests/test_onchange.py index 88e481c3052..9876d631044 100644 --- a/openerp/addons/test_new_api/tests/test_onchange.py +++ b/openerp/addons/test_new_api/tests/test_onchange.py @@ -307,7 +307,12 @@ class TestOnChange(common.TransactionCase): # When one2many domain contains non-computed field, things are ok self.assertEqual(result['value']['important_messages'], - [(5,)] + [(4, msg.id) for msg in discussion.important_messages]) + [(5,)] + [(1, msg.id, { + 'name': msg.name, + 'body': msg.body, + 'author': (msg.author.id, msg.author.display_name), + 'size': msg.size + }) for msg in discussion.important_messages]) # But here with commit 5676d81, we get value of: [(2, email.id)] self.assertEqual( diff --git a/openerp/fields.py b/openerp/fields.py index 6ccc6325f83..635d5db10ad 100644 --- a/openerp/fields.py +++ b/openerp/fields.py @@ -1915,9 +1915,8 @@ class One2many(_RelationalMulti): _column_limit = property(attrgetter('limit')) def convert_to_onchange(self, value, fnames=None): - if fnames: - # do not serialize self's inverse field - fnames = [name for name in fnames if name != self.inverse_name] + fnames = set(fnames or value.fields_view_get()['fields']) + fnames.discard(self.inverse_name) return super(One2many, self).convert_to_onchange(value, fnames)