From 55fa50891d070c8aca0c3b8901477816a82e9139 Mon Sep 17 00:00:00 2001 From: Samus CTO Date: Tue, 25 Nov 2014 17:04:32 +0100 Subject: [PATCH] [FIX] Use _unknown model for missing models in relation fields During a migration of database, it is possible that some custom field ("x_", state is 'manual') are relational to model from a module that is not provided. Note: this used to work in Odoo 7.0 but crashed in 8.0. Closes #3877 --- openerp/addons/base/ir/ir_model.py | 7 +++++++ openerp/fields.py | 6 ++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/openerp/addons/base/ir/ir_model.py b/openerp/addons/base/ir/ir_model.py index c50044d3ff9..96819f918dc 100644 --- a/openerp/addons/base/ir/ir_model.py +++ b/openerp/addons/base/ir/ir_model.py @@ -62,6 +62,13 @@ def _in_modules(self, cr, uid, ids, field_name, arg, context=None): result[k] = ', '.join(sorted(installed_modules & set(xml_id.split('.')[0] for xml_id in v))) return result +class unknown(models.AbstractModel): + """ + Abstract model used as a substitute for relational fields with an unknown + comodel. + """ + _name = '_unknown' + class ir_model(osv.osv): _name = 'ir.model' _description = "Models" diff --git a/openerp/fields.py b/openerp/fields.py index 88a6fe8ef5f..df9cb9a3f36 100644 --- a/openerp/fields.py +++ b/openerp/fields.py @@ -1372,8 +1372,10 @@ class _Relational(Field): def _setup(self, env): super(_Relational, self)._setup(env) - assert self.comodel_name in env.registry, \ - "Field %s with unknown comodel_name %r" % (self, self.comodel_name) + if self.comodel_name not in env.registry: + _logger.warning("Field %s with unknown comodel_name %r" + % (self, self.comodel_name)) + self.comodel_name = '_unknown' @property def _related_domain(self):