[FIX] models: on update, call inverse function on field even when it is stored
authorRaphael Collet <rco@openerp.com>
Wed, 1 Oct 2014 09:32:50 +0000 (11:32 +0200)
committerRaphael Collet <rco@openerp.com>
Mon, 13 Oct 2014 11:45:52 +0000 (13:45 +0200)
The inverse function of a stored computed field was not called when creating or
writing on a record with such a field.

openerp/models.py

index a4597a2..d3aae9a 100644 (file)
@@ -3637,10 +3637,12 @@ class BaseModel(object):
         # split up fields into old-style and pure new-style ones
         old_vals, new_vals, unknown = {}, {}, []
         for key, val in vals.iteritems():
-            if key in self._columns:
-                old_vals[key] = val
-            elif key in self._fields:
-                new_vals[key] = val
+            field = self._fields.get(key)
+            if field:
+                if field.store or field.inherited:
+                    old_vals[key] = val
+                if field.inverse and not field.inherited:
+                    new_vals[key] = val
             else:
                 unknown.append(key)
 
@@ -3936,10 +3938,12 @@ class BaseModel(object):
         # split up fields into old-style and pure new-style ones
         old_vals, new_vals, unknown = {}, {}, []
         for key, val in vals.iteritems():
-            if key in self._all_columns:
-                old_vals[key] = val
-            elif key in self._fields:
-                new_vals[key] = val
+            field = self._fields.get(key)
+            if field:
+                if field.store or field.inherited:
+                    old_vals[key] = val
+                if field.inverse and not field.inherited:
+                    new_vals[key] = val
             else:
                 unknown.append(key)