[FIX] models: in method onchange, filter out pseudo-fields
This commit is contained in:
+14
-3
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user