summaryrefslogtreecommitdiff
path: root/odoo/fields.py
diff options
context:
space:
mode:
authorMartin Trigaux <mat@odoo.com>2019-09-17 15:17:04 +0000
committerMartin Trigaux <mat@odoo.com>2019-09-18 14:56:41 +0000
commit543a5523a30c993f60eba3c6d56d54dea2857eb3 (patch)
treed9486165ddbeac7c2ddae868ee527f9d7456e927 /odoo/fields.py
parent2425c7b223398fa2bc43ecbb95111be15e1599ce (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.py14
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,