[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:
parent
0a9c64c17d
commit
f5f76094a7
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue