[FIX] models: in method onchange, filter out pseudo-fields

This commit is contained in:
Raphael Collet
2017-09-19 17:06:04 +02:00
parent d547f63cb7
commit 3069734d4f
+14 -3
View File
@@ -4937,6 +4937,17 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
if not all(name in self._fields for name in names):
return {}
# filter out keys in field_onchange that do not refer to actual fields
dotnames = []
for dotname in field_onchange:
try:
model = self.browse()
for name in dotname.split('.'):
model = model[name]
dotnames.append(dotname)
except Exception:
pass
# create a new record with values, and attach ``self`` to it
with env.do_in_onchange():
record = self.new(values)
@@ -4946,7 +4957,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
# load fields on secondary records, to avoid false changes
with env.do_in_onchange():
for dotname in field_onchange:
for dotname in dotnames:
record.mapped(dotname)
# determine which field(s) should be triggered an onchange
@@ -4980,7 +4991,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
record._onchange_eval(name, field_onchange[name], result)
# force re-evaluation of function fields on secondary records
for dotname in field_onchange:
for dotname in dotnames:
record.mapped(dotname)
# determine which fields have been modified
@@ -4996,7 +5007,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
# determine subfields for field.convert_to_onchange() below
Tree = lambda: defaultdict(Tree)
subnames = Tree()
for dotname in field_onchange:
for dotname in dotnames:
subtree = subnames
for name in dotname.split('.'):
subtree = subtree[name]