From 0ec5456e633ada5b55ef4d711a2cd3073391ef9d Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Tue, 15 Mar 2016 16:31:58 +0100 Subject: [PATCH] [IMP] ir_model: add validation on custom field dependencies --- openerp/addons/base/ir/ir_model.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/openerp/addons/base/ir/ir_model.py b/openerp/addons/base/ir/ir_model.py index 9e50a9fbcb8..261e5a8127b 100644 --- a/openerp/addons/base/ir/ir_model.py +++ b/openerp/addons/base/ir/ir_model.py @@ -328,6 +328,22 @@ class ir_model_fields(osv.osv): self.readonly = True self.copy = False + @api.constrains('depends') + def _check_depends(self): + """ Check whether all fields in dependencies are valid. """ + for record in self: + for seq in (record.depends or "").split(","): + model = self.env[record.model] + names = seq.strip().split(".") + last = len(names) - 1 + for index, name in enumerate(names): + field = model._fields.get(name) + if field is None: + raise UserError(_("Unknown field %r in dependency %r") % (name, seq.strip())) + if index < last and not field.relational: + raise UserError(_("Non-relational field %r in dependency %r") % (name, seq.strip())) + model = model[name] + @api.onchange('compute') def _onchange_compute(self): if self.compute: