[FIX] fields: in *2many convert_to_write(), return all fields for new records and...
authorRaphael Collet <rco@openerp.com>
Tue, 25 Nov 2014 10:25:50 +0000 (11:25 +0100)
committerRaphael Collet <rco@openerp.com>
Tue, 25 Nov 2014 10:25:50 +0000 (11:25 +0100)
openerp/addons/test_new_api/tests/test_onchange.py
openerp/fields.py

index 709e07f..e9b7e1f 100644 (file)
@@ -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),
index d820659..3d08eb0 100644 (file)
@@ -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)