diff --git a/openerp/addons/test_new_api/tests/test_onchange.py b/openerp/addons/test_new_api/tests/test_onchange.py index 709e07f5551..e9b7e1f83aa 100644 --- a/openerp/addons/test_new_api/tests/test_onchange.py +++ b/openerp/addons/test_new_api/tests/test_onchange.py @@ -140,6 +140,9 @@ class TestOnChange(common.TransactionCase): self.assertItemsEqual(result['value']['messages'], [ (0, 0, { 'name': "[%s] %s" % ("Foo", USER.name), + 'body': BODY, + 'author': USER.id, + 'size': len(BODY), }), (1, message.id, { 'name': "[%s] %s" % ("Foo", USER.name), diff --git a/openerp/fields.py b/openerp/fields.py index d820659d0f6..3d08eb0e464 100644 --- a/openerp/fields.py +++ b/openerp/fields.py @@ -1577,13 +1577,14 @@ class _RelationalMulti(_Relational): # add new and existing records for record in value: - if not record.id or record._is_dirty(): + if not record.id: + values = {k: v for k, v in record._cache.iteritems() if k in fnames} + values = record._convert_to_write(values) + result.append((0, 0, values)) + elif record._is_dirty(): values = {k: record._cache[k] for k in record._get_dirty() if k in fnames} values = record._convert_to_write(values) - if not record.id: - result.append((0, 0, values)) - else: - result.append((1, record.id, values)) + result.append((1, record.id, values)) else: add_existing(record.id)