diff --git a/proteus/proteus/__init__.py b/proteus/proteus/__init__.py index 5b034d6647..741bc98108 100644 --- a/proteus/proteus/__init__.py +++ b/proteus/proteus/__init__.py @@ -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))