summaryrefslogtreecommitdiff
path: root/odoo/models.py
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2017-08-28 14:49:11 +0200
committerChristophe Simonis <chs@odoo.com>2017-08-28 14:49:11 +0200
commitd0f132b297e88cc79251a9ddf1a2deb66de415ac (patch)
tree30e5f946334aff4c0b116ff96ac4258542bcaad4 /odoo/models.py
parentb3b6267cf001b04ec0aae1573d47f16070803715 (diff)
parent4ac347735d4de252678b557afab7cac3c3eb75de (diff)
[MERGE] forward port branch saas-16 up to 4ac347735d4
Diffstat (limited to 'odoo/models.py')
-rw-r--r--odoo/models.py12
1 files changed, 12 insertions, 0 deletions
diff --git a/odoo/models.py b/odoo/models.py
index 792e9f04182..56ead9d3579 100644
--- a/odoo/models.py
+++ b/odoo/models.py
@@ -572,6 +572,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
def is_onchange(func):
return callable(func) and hasattr(func, '_onchange')
+ # collect onchange methods on the model's class
cls = type(self)
methods = defaultdict(list)
for attr, func in getmembers(cls, is_onchange):
@@ -580,6 +581,17 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
_logger.warning("@onchange%r parameters must be field names", func._onchange)
methods[name].append(func)
+ # add onchange methods to implement "change_default" on fields
+ def onchange_default(field, self):
+ value = field.convert_to_write(self[field.name], self)
+ condition = "%s=%s" % (field.name, value)
+ defaults = self.env['ir.values'].get_defaults_dict(self._name, condition)
+ self.update(defaults)
+
+ for name, field in cls._fields.items():
+ if field.change_default:
+ methods[name].append(functools.partial(onchange_default, field))
+
# optimization: memoize result on cls, it will not be recomputed
cls._onchange_methods = methods
return methods