diff options
| author | Raphael Collet <rco@odoo.com> | 2019-05-31 13:48:21 +0000 |
|---|---|---|
| committer | Raphael Collet <rco@odoo.com> | 2019-06-13 14:39:13 +0000 |
| commit | fb04afb15dd81479014b3ef3a8ded0d65775937d (patch) | |
| tree | add10fd6bc743a238894989f9786a838c2a95a4b /odoo | |
| parent | e0e9ae1edd829c9caa6138728ba678a7f8b2dd18 (diff) | |
[FIX] fields: avoid infinite recursion in convert_to_write
Diffstat (limited to 'odoo')
| -rw-r--r-- | odoo/addons/test_new_api/tests/test_new_fields.py | 3 | ||||
| -rw-r--r-- | odoo/fields.py | 4 |
2 files changed, 6 insertions, 1 deletions
diff --git a/odoo/addons/test_new_api/tests/test_new_fields.py b/odoo/addons/test_new_api/tests/test_new_fields.py index e7deced446f..10edaa907f4 100644 --- a/odoo/addons/test_new_api/tests/test_new_fields.py +++ b/odoo/addons/test_new_api/tests/test_new_fields.py @@ -1052,6 +1052,9 @@ class TestFields(common.TransactionCase): self.assertEqual(new_email.message._origin, msg0) self.assertEqual(new_email.body, "XXX") + # check that this does not generate an infinite recursion + new_disc._convert_to_write(new_disc._cache) + def test_40_new_ref_origin(self): """ Test the behavior of new records with ref/origin. """ Discussion = self.env['test_new_api.discussion'] diff --git a/odoo/fields.py b/odoo/fields.py index cde78d4b180..2745a6e556d 100644 --- a/odoo/fields.py +++ b/odoo/fields.py @@ -2360,6 +2360,7 @@ class _RelationalMulti(_Relational): return value.ids def convert_to_write(self, value, record): + inv_names = {field.name for field in record._field_inverses[self]} # make result with new and existing records result = [(6, 0, [])] for record in value: @@ -2368,6 +2369,7 @@ class _RelationalMulti(_Relational): values = record._convert_to_write({ name: record[name] for name in record._cache + if name not in inv_names }) result.append((0, 0, values)) else: @@ -2376,7 +2378,7 @@ class _RelationalMulti(_Relational): values = record._convert_to_write({ name: record[name] for name in record._cache - if record[name] != origin[name] + if name not in inv_names and record[name] != origin[name] }) if values: result.append((1, origin.id, values)) |
