[FIX] orm write: do not try to store computed & stored fields for relational records deleted by *2many fields

opw-613772
This commit is contained in:
Denis Ledoux 2014-09-17 13:32:30 +02:00
parent 0a9c64c17d
commit f5f76094a7
1 changed files with 8 additions and 1 deletions

View 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)