summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordansanti <dansanti@gmail.com>2016-05-31 14:04:54 -0400
committerJeremy Kersten <jke@odoo.com>2017-01-18 15:27:20 +0100
commitbbdf9605e4c480e1fc19b1faac9cfc4321bcaea2 (patch)
treef73a88f50c6541f2599e9efd0d8f1b095b8dff46
parent16349661e3f2466c9f3e37496478de4605d3be10 (diff)
[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
-rw-r--r--openerp/addons/test_new_api/tests/test_onchange.py7
-rw-r--r--openerp/fields.py5
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)