diff --git a/odoo/addons/base/models/ir_property.py b/odoo/addons/base/models/ir_property.py index 19664fe75e8..8a7d4fd6f83 100644 --- a/odoo/addons/base/models/ir_property.py +++ b/odoo/addons/base/models/ir_property.py @@ -113,14 +113,17 @@ class Property(models.Model): # if any of the records we're writing on has a res_id=False *or* # we're writing a res_id=False on any record default_set = False - if self._ids: - self.env.cr.execute( - 'SELECT EXISTS (SELECT 1 FROM ir_property WHERE id in %s AND res_id IS NULL)', [self._ids]) - default_set = self.env.cr.rowcount == 1 or any( - v.get('res_id') is False - for v in values - ) - r = super(Property, self).write(self._update_values(values)) + + values = self._update_values(values) + default_set = ( + # turning a record value into a fallback value + values.get('res_id') is False and any(record.res_id for record in self) + ) or any( + # changing a fallback value + not record.res_id and any(record[fname] != self._fields[fname].convert_to_record(value, self) for fname, value in values.items()) + for record in self + ) + r = super().write(values) if default_set: # DLE P44: test `test_27_company_dependent` # Easy solution, need to flush write when changing a property.