[IMP] orm: copy() does not copy deprecated fields

bzr revid: chs@openerp.com-20131126185210-8kd5stdexa4ozn2m
This commit is contained in:
Christophe Simonis 2013-11-26 19:52:10 +01:00
parent bbd8f7bb98
commit 6347f9f4ea
1 changed files with 15 additions and 8 deletions

View File

@ -4991,8 +4991,8 @@ class BaseModel(object):
context = {}
# avoid recursion through already copied records in case of circular relationship
seen_map = context.setdefault('__copy_data_seen',{})
if id in seen_map.setdefault(self._name,[]):
seen_map = context.setdefault('__copy_data_seen', {})
if id in seen_map.setdefault(self._name, []):
return
seen_map[self._name].append(id)
@ -5005,12 +5005,6 @@ class BaseModel(object):
else:
default['state'] = self._defaults['state']
data = self.read(cr, uid, [id,], context=context)
if data:
data = data[0]
else:
raise IndexError( _("Record #%d of %s not found, cannot copy!") %( id, self._name))
# build a black list of fields that should not be copied
blacklist = set(MAGIC_COLUMNS + ['parent_left', 'parent_right'])
def blacklist_given_fields(obj):
@ -5023,8 +5017,21 @@ class BaseModel(object):
blacklist.update(set(self.pool[other]._all_columns) - set(self._columns))
else:
blacklist_given_fields(self.pool[other])
# blacklist deprecated fields
for name, field in obj._columns.items():
if field.deprecated:
blacklist.add(name)
blacklist_given_fields(self)
fields_to_read = [f for f in self.check_field_access_rights(cr, uid, 'read', None)
if f not in blacklist]
data = self.read(cr, uid, [id], fields_to_read, context=context)
if data:
data = data[0]
else:
raise IndexError(_("Record #%d of %s not found, cannot copy!") % (id, self._name))
res = dict(default)
for f, colinfo in self._all_columns.items():
field = colinfo.column