diff options
| author | Christophe Simonis <chs@odoo.com> | 2017-08-28 14:49:11 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2017-08-28 14:49:11 +0200 |
| commit | d0f132b297e88cc79251a9ddf1a2deb66de415ac (patch) | |
| tree | 30e5f946334aff4c0b116ff96ac4258542bcaad4 /odoo/models.py | |
| parent | b3b6267cf001b04ec0aae1573d47f16070803715 (diff) | |
| parent | 4ac347735d4de252678b557afab7cac3c3eb75de (diff) | |
[MERGE] forward port branch saas-16 up to 4ac347735d4
Diffstat (limited to 'odoo/models.py')
| -rw-r--r-- | odoo/models.py | 12 |
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 |
