diff options
| author | Martin Trigaux <mat@odoo.com> | 2019-09-17 15:17:04 +0000 |
|---|---|---|
| committer | Martin Trigaux <mat@odoo.com> | 2019-09-18 14:56:41 +0000 |
| commit | 543a5523a30c993f60eba3c6d56d54dea2857eb3 (patch) | |
| tree | d9486165ddbeac7c2ddae868ee527f9d7456e927 /odoo/fields.py | |
| parent | 2425c7b223398fa2bc43ecbb95111be15e1599ce (diff) | |
[FIMP] base: remove all translations when writing False
This "bugprovement" resolve the old issue of writing on a translatable
field a falsy value.
Before this commit, only the translation value was removed. When no
translation is present (or when the value is not set), the value is
retrieved directly from the source field.
Before 18d9c2cab2426, it was still possible to go around this issue by
removing manually all ir.translation entries and writing with a user
in en_US.
This is no longer possible as writing on a translatable field always
uses translations when in multi-language environment, without
exception of en_US.
When writing a falsy value on a field, the expected behaviour is to
reset the value and see that falsy value after saving, not the old
value stored on the source model.
Remove all translations and force to update the column.
Removing one individual translation is still possible in the
translation popup.
Task id: 2062415
closes odoo/odoo#37077
Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
Diffstat (limited to 'odoo/fields.py')
| -rw-r--r-- | odoo/fields.py | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/odoo/fields.py b/odoo/fields.py index dc685d7885b..2576fd770ac 100644 --- a/odoo/fields.py +++ b/odoo/fields.py @@ -1435,8 +1435,8 @@ class _String(Field): update_column = True update_trans = True elif lang != 'en_US': - # update the translations only - update_column = False + # update the translations only except if emptying + update_column = cache_value is None update_trans = True # update towrite if modifying the source @@ -1445,7 +1445,7 @@ class _String(Field): for rid in real_recs._ids: # cache_value is already in database format towrite[rid][self.name] = cache_value - if self.translate is True: + if self.translate is True and cache_value is not None: tname = "%s,%s" % (records._name, self.name) records.env['ir.translation']._set_source(tname, real_recs._ids, value) @@ -1464,7 +1464,13 @@ class _String(Field): source_recs[self.name] = value source_value = value tname = "%s,%s" % (self.model_name, self.name) - if single_lang: + if value is None: + records.env['ir.translation'].search([ + ('name', '=', tname), + ('type', '=', 'model'), + ('res_id', 'in', real_recs._ids) + ]).unlink() + elif single_lang: records.env['ir.translation']._update_translations([dict( src=source_value, value=value, |
