From dafa12d92caf553f40bd1bbb052864ab63d4bd53 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 10 Oct 2013 19:07:18 +0200 Subject: [PATCH] [FIX] ir.model: FK constraints for custom m2o fields were never created, creating possible data integrity errors bzr revid: odo@openerp.com-20131010170718-lwoxkqc1tx7i8vhg --- openerp/addons/base/ir/ir_model.py | 3 +++ openerp/osv/orm.py | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/openerp/addons/base/ir/ir_model.py b/openerp/addons/base/ir/ir_model.py index 03574708824..14061e4522e 100644 --- a/openerp/addons/base/ir/ir_model.py +++ b/openerp/addons/base/ir/ir_model.py @@ -198,6 +198,7 @@ class ir_model(osv.osv): select=vals.get('select_level', '0'), update_custom_fields=True) self.pool.get(vals['model'])._auto_init(cr, ctx) + self.pool.get(vals['model'])._auto_end(cr, ctx) # actually create FKs! openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) return res @@ -356,6 +357,7 @@ class ir_model_fields(osv.osv): select=vals.get('select_level', '0'), update_custom_fields=True) self.pool.get(vals['model'])._auto_init(cr, ctx) + self.pool.get(vals['model'])._auto_end(cr, ctx) # actually create FKs! openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) return res @@ -473,6 +475,7 @@ class ir_model_fields(osv.osv): for col_name, col_prop, val in patch_struct[1]: setattr(obj._columns[col_name], col_prop, val) obj._auto_init(cr, ctx) + obj._auto_end(cr, ctx) # actually create FKs! openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) return res diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 4af5579266b..3ec2f69ec3e 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -2847,8 +2847,12 @@ class BaseModel(object): """ Record the creation of a constraint for this model, to make it possible to delete it later when the module is uninstalled. Type can be either - 'f' or 'u' depending on the constraing being a foreign key or not. + 'f' or 'u' depending on the constraint being a foreign key or not. """ + if not self._module: + # no need to save constraints for custom models as they're not part + # of any module + return assert type in ('f', 'u') cr.execute(""" SELECT 1 FROM ir_model_constraint, ir_module_module