diff --git a/odoo/fields.py b/odoo/fields.py index 3ada0e914ab..c56c67e08d6 100644 --- a/odoo/fields.py +++ b/odoo/fields.py @@ -35,6 +35,11 @@ EMPTY_DICT = frozendict() RENAMED_ATTRS = [('select', 'index'), ('digits_compute', 'digits')] DEPRECATED_ATTRS = [("oldname", "use an upgrade script instead.")] +IR_MODELS = ( + 'ir.model', 'ir.model.data', 'ir.model.fields', 'ir.model.fields.selection', + 'ir.model.relation', 'ir.model.constraint', 'ir.module.module', +) + _logger = logging.getLogger(__name__) _schema = logging.getLogger(__name__[:-7] + '.schema') @@ -2292,6 +2297,12 @@ class Many2one(_Relational): "as being 'set null'. Only 'restrict' and 'cascade' make sense." % (self.name, model._name) ) + if self.ondelete == 'restrict' and self.comodel_name in IR_MODELS: + raise ValueError( + f"Field {self.name} of model {model._name} is defined as ondelete='restrict' " + f"while having {self.comodel_name} as comodel, the 'restrict' mode is not " + f"supported for this type of field as comodel." + ) def update_db(self, model, columns): comodel = model.env[self.comodel_name]