[FIX] orm write: do not try to store computed & stored fields for relational records...
authorDenis Ledoux <dle@odoo.com>
Wed, 17 Sep 2014 11:32:30 +0000 (13:32 +0200)
committerDenis Ledoux <dle@odoo.com>
Wed, 17 Sep 2014 11:32:30 +0000 (13:32 +0200)
opw-613772

openerp/osv/orm.py

index 07ed496..f934235 100644 (file)
@@ -55,6 +55,7 @@ import simplejson
 import time
 import traceback
 import types
+from collections import defaultdict
 
 import psycopg2
 from lxml import etree
@@ -4166,6 +4167,7 @@ class BaseModel(object):
         """
         readonly = None
         self.check_field_access_rights(cr, user, 'write', vals.keys())
+        deleted_related = defaultdict(list)
         for field in vals.copy():
             fobj = None
             if field in self._columns:
@@ -4174,6 +4176,10 @@ class BaseModel(object):
                 fobj = self._inherit_fields[field][2]
             if not fobj:
                 continue
+            if fobj._type in ['one2many', 'many2many'] and vals[field]:
+                for wtuple in vals[field]:
+                    if isinstance(wtuple, (tuple, list)) and wtuple[0] == 2:
+                        deleted_related[fobj._obj].append(wtuple[1])
             groups = fobj.write
 
             if groups:
@@ -4380,7 +4386,8 @@ class BaseModel(object):
             for id in ids_to_update:
                 if id not in done[key]:
                     done[key][id] = True
-                    todo.append(id)
+                    if id not in deleted_related[object]:
+                        todo.append(id)
             self.pool.get(object)._store_set_values(cr, user, todo, fields_to_recompute, context)
 
         self._workflow_trigger(cr, user, ids, 'trg_write', context=context)