diff --git a/odoo/addons/base/i18n/base.pot b/odoo/addons/base/i18n/base.pot index dbe6081f23b..4a04bae06f1 100644 --- a/odoo/addons/base/i18n/base.pot +++ b/odoo/addons/base/i18n/base.pot @@ -22181,6 +22181,12 @@ msgstr "" msgid "The list of models that extends the current model." msgstr "" +#. module: base +#: code:addons/base/models/ir_model.py:522 +#, python-format +msgid "The m2o field %s is required but declares its ondelete policy as being 'set null'. Only 'restrict' and 'cascade' make sense." +msgstr "" + #. module: base #: model:ir.model.fields,help:base.field_ir_filters__action_id msgid "" diff --git a/odoo/addons/base/models/ir_model.py b/odoo/addons/base/models/ir_model.py index b0222dadf38..e5329a965fd 100644 --- a/odoo/addons/base/models/ir_model.py +++ b/odoo/addons/base/models/ir_model.py @@ -679,6 +679,16 @@ class IrModelFields(models.Model): 'message': _("The table %r if used for other, possibly incompatible fields.") % self.relation_table, }} + @api.onchange('required', 'ttype', 'on_delete') + def _onchange_required(self): + for rec in self: + if rec.ttype == 'many2one' and rec.required and rec.on_delete == 'set null': + return {'warning': {'title': _("Warning"), 'message': _( + "The m2o field %s is required but declares its ondelete policy " + "as being 'set null'. Only 'restrict' and 'cascade' make sense." + % (rec.name) + )}} + def _get(self, model_name, name): """ Return the (sudoed) `ir.model.fields` record with the given model and name. The result may be an empty recordset if the model is not found.