From 1cfbbfafb8db162bb43db76a208add3349f85172 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Fri, 16 Dec 2016 14:29:42 +0100 Subject: [PATCH] [FIX] module deinstallation: do not prevent `ir.model.field` deletion Some code prevents to modify or delete an `ir.model.field` if another field depends on it (like one2many depending on many2one). Make a special case when the code is executed during a module deinstallation. OPW 694009 --- odoo/addons/base/ir/ir_model.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/odoo/addons/base/ir/ir_model.py b/odoo/addons/base/ir/ir_model.py index c989dd4efc5..ac1f1d4caca 100644 --- a/odoo/addons/base/ir/ir_model.py +++ b/odoo/addons/base/ir/ir_model.py @@ -435,6 +435,12 @@ class IrModelFields(models.Model): model = self.env[record.model] field = model._fields[record.name] if field.type == 'many2one' and model._field_inverses.get(field): + if self._context.get(MODULE_UNINSTALL_FLAG): + # automatically unlink the corresponding one2many field(s) + inverses = self.search([('relation', '=', field.model_name), + ('relation_field', '=', field.name)]) + inverses.unlink() + continue msg = _("The field '%s' cannot be removed because the field '%s' depends on it.") raise UserError(msg % (field, model._field_inverses[field][0]))