Recursively set values on record for xxx2Many fields
The values for wizard may be a list of dictionaries for xxx2many fields. Closes #14055 (grafted from d86fc16613d824588b6532d3220ad48986f39f44) --HG-- branch : 6.0
This commit is contained in:
1 parent
30a07d1e7a
commit
50efcbb26a
1 file changed
+11
-7
@@ -957,8 +957,7 @@ class Model(object):
|
||||
fields = [x for x, y in self._fields.items()
|
||||
if y['loading'] == 'eager']
|
||||
fields.append('_timestamp')
|
||||
self._values.update(
|
||||
self._proxy.read([self.id], fields, self._context)[0])
|
||||
self._set(self._proxy.read([self.id], fields, self._context)[0])
|
||||
for field in fields:
|
||||
if (field in self._fields
|
||||
and self._fields[field]['type'] == 'float'
|
||||
@@ -972,13 +971,14 @@ class Model(object):
|
||||
self._default_set(
|
||||
self._proxy.default_get(fields, False, self._context))
|
||||
|
||||
def _default_set(self, values):
|
||||
def _set(self, values, _default=False):
|
||||
fieldnames = []
|
||||
for field, value in values.items():
|
||||
if '.' in field:
|
||||
continue
|
||||
definition = self._fields[field]
|
||||
if definition['type'] in ('one2many', 'many2many'):
|
||||
definition = self._fields.get(field)
|
||||
if (definition
|
||||
and definition['type'] in {'one2many', 'many2many'}):
|
||||
if value and len(value) and isinstance(value[0], int):
|
||||
self._values[field] = value
|
||||
else:
|
||||
@@ -987,12 +987,16 @@ class Model(object):
|
||||
definition, [], self, field)
|
||||
for vals in (value or []):
|
||||
record = Relation()
|
||||
record._default_set(vals)
|
||||
record._set(vals, _default=_default)
|
||||
records.append(record)
|
||||
else:
|
||||
self._values[field] = value
|
||||
fieldnames.append(field)
|
||||
self._on_change(sorted(fieldnames))
|
||||
if _default:
|
||||
self._on_change(sorted(fieldnames))
|
||||
|
||||
def _default_set(self, values):
|
||||
return self._set(values, _default=True)
|
||||
|
||||
def _get_eval(self):
|
||||
values = dict((x, getattr(self, '__%s_eval' % x))
|
||||
|
||||
Reference in new issue
Block a user