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:
Cédric Krier committed 2025-07-11 23:14:50 +02:00
1 parent 30a07d1e7a
commit 50efcbb26a
1 file changed
+11 -7
+11 -7
View File
@@ -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))