Skip to content

Commit

Permalink
[FIX] models: in method onchange, filter out pseudo-fields
Browse files Browse the repository at this point in the history
  • Loading branch information
rco-odoo committed Sep 19, 2017
1 parent d547f63 commit 3069734
Showing 1 changed file with 14 additions and 3 deletions.
17 changes: 14 additions & 3 deletions odoo/models.py
Expand Up @@ -4937,6 +4937,17 @@ def onchange(self, values, field_name, field_onchange):
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)
Expand All @@ -4946,7 +4957,7 @@ def onchange(self, values, field_name, field_onchange):

# 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
Expand Down Expand Up @@ -4980,7 +4991,7 @@ def onchange(self, values, field_name, field_onchange):
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
Expand All @@ -4996,7 +5007,7 @@ def onchange(self, values, field_name, field_onchange):
# 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]
Expand Down

0 comments on commit 3069734

Please sign in to comment.