From 57191c139d6a79e1734d22b57cecd4017dd1a220 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 12 Aug 2010 22:08:48 +0200 Subject: [PATCH] [IMP] orm/inherits: check that m2o fields implementing _inherits are marked required with ondelete cascade Fix the issue if one is detected, either adding the missing field or forcing the attributes bzr revid: odo@openerp.com-20100812200848-l8q72d44237gn5uk --- bin/osv/orm.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/bin/osv/orm.py b/bin/osv/orm.py index d9918f6aeca..fa909f32ee8 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -2616,7 +2616,7 @@ class orm(orm_template): self._columns[field['name']] = getattr(fields, field['ttype'])(field['relation'], _rel_name, 'id1', 'id2', **attrs) else: self._columns[field['name']] = getattr(fields, field['ttype'])(**attrs) - + self._inherits_check() self._inherits_reload() if not self._sequence: self._sequence = self._table+'_id_seq' @@ -2734,6 +2734,17 @@ class orm(orm_template): self._inherit_fields = res self._inherits_reload_src() + def _inherits_check(self): + for table, field_name in self._inherits.items(): + if field_name not in self._columns: + logging.getLogger('init').info('Missing many2one field definition for _inherits reference "%s" in "%s", using default one.' % (field_name, self._name)) + self._columns[field_name] = fields.many2one(table, string="Automatically created field to link to parent %s" % table, + required=True, ondelete="cascade") + elif not self._columns[field_name].required or self._columns[field_name].ondelete.lower() != "cascade": + logging.getLogger('init').warning('Field definition for _inherits reference "%s" in "%s" must be marked as "required" with ondelete="cascade", forcing it.' % (field_name, self._name)) + self._columns[field_name].required = True + self._columns[field_name].ondelete = "cascade" + #def __getattr__(self, name): # """ # Proxies attribute accesses to the `inherits` parent so we can call methods defined on the inherited parent