From 04ecbe08b976076c33972f186b2153891bb4514f Mon Sep 17 00:00:00 2001 From: "Nasreddin (bon)" Date: Tue, 5 May 2020 11:19:35 +0000 Subject: [PATCH] [IMP] base: Warning on m2o required field with ondelete set to 'Set NULL' Since a required field can not be empty: a warning message will be thrown if a many2one required field has the "on_delete" attribute set to "Set NULL". Task ID 2250533 closes odoo/odoo#50751 X-original-commit: 084555c6395b484a85ec9d386fbc8afc8aec1f8c Signed-off-by: Nicolas Martinelli (nim) --- odoo/addons/base/i18n/base.pot | 6 ++++++ odoo/addons/base/models/ir_model.py | 10 ++++++++++ 2 files changed, 16 insertions(+) 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.