[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.
This commit is contained in:
Raphael Collet
2016-02-16 17:05:05 +01:00
parent e3ed3d67fb
commit 92144ef64b
+13 -12
View File
@@ -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.