From 06d73eab623e58427a7387879d242c320dc5d399 Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Thu, 21 Feb 2019 14:47:47 +0000 Subject: [PATCH] [FIX] models: do not erase master version For a translated field with a callable method (e.g. xml_translate), when modifying the value of this field in another language than en_US, the master version was lost. Before this patch: >>> record.arch = "

Title

" >>> record.with_context(lang='fr_FR').arch = "

Titre

" >>> record.with_context(lang='fr_FR').arch "

Titre

" >>> record.arch "

Titre

" # lost English version After this patch: >>> record.arch = "

Title

" >>> record.with_context(lang='fr_FR').arch = "

Titre

" >>> record.with_context(lang='fr_FR').arch "

Title

" # write had no effect >>> record.arch "

Title

" When modifying a translated HTML field in English, a matching to detect the difference and avoid losing the translations is done. This is not supported for update in another language. The main reason is the difficulty to detect changes in the architecture. To update translations, the supported way is to go to the list of translations and update them there. Before this patch, the given value in another language was given to the SQL query and made an update in database: if single_lang or not (has_translation and field.translate is True) -> True or not (True and False) -> True If a field is callable, it should also be ignored, the same way than translate=True fields opw-1887162 closes odoo/odoo#31330 --- odoo/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/odoo/models.py b/odoo/models.py index 6423e18f314..e49f98ee0d8 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -3360,7 +3360,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): _logger.warning('Field %s is deprecated: %s', field, field.deprecated) if field.column_type: - if single_lang or not (has_translation and field.translate is True): + if single_lang or not (has_translation and field.translate): # val is not a translation: update the table val = field.convert_to_column(val, self, vals) columns.append((name, field.column_format, val))