From 92144ef64bc93fee6445874f430d71982771f1f6 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Tue, 16 Feb 2016 15:32:23 +0100 Subject: [PATCH] [FIX] fields: do not add triggers for the fields of an abstract model This avoids recomputing a computed field defined on an abstract model, which crashes because the model's table does not exist in database. --- openerp/models.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/openerp/models.py b/openerp/models.py index d5e96a9c66e..8e4ef7e7861 100644 --- a/openerp/models.py +++ b/openerp/models.py @@ -3126,18 +3126,19 @@ class BaseModel(object): """ Setup recomputation triggers, and complete the model setup. """ cls = type(self) - # set up field triggers - for field in cls._fields.itervalues(): - field.setup_triggers(self.env) + if isinstance(self, Model): + # set up field triggers (on database-persisted models only) + for field in cls._fields.itervalues(): + field.setup_triggers(self.env) - # add invalidation triggers on model dependencies - if cls._depends: - for model_name, field_names in cls._depends.iteritems(): - model = self.env[model_name] - for field_name in field_names: - field = model._fields[field_name] - for dependent in cls._fields.itervalues(): - model._field_triggers.add(field, (dependent, None)) + # add invalidation triggers on model dependencies + if cls._depends: + for model_name, field_names in cls._depends.iteritems(): + model = self.env[model_name] + for field_name in field_names: + field = model._fields[field_name] + for dependent in cls._fields.itervalues(): + model._field_triggers.add(field, (dependent, None)) # determine old-api structures about inherited fields cls._inherits_reload() @@ -6221,7 +6222,7 @@ class Model(AbstractModel): _register = False # not visible in ORM registry, meant to be python-inherited only _transient = False # not transient -class TransientModel(AbstractModel): +class TransientModel(Model): """ Model super-class for transient records, meant to be temporarily persisted, and regularly vacuum-cleaned.