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: