diff --git a/openerp/fields.py b/openerp/fields.py index 5f7255c7e24..e2a79ad06a0 100644 --- a/openerp/fields.py +++ b/openerp/fields.py @@ -394,8 +394,8 @@ class Field(object): if `self` has already been set up. """ if not self.setup_done: - self.setup_done = True self._setup(env) + self.setup_done = True def _setup(self, env): """ Do the actual setup of `self`. """ @@ -427,16 +427,13 @@ class Field(object): self.related = tuple(self.related.split('.')) # determine the chain of fields, and make sure they are all set up - fields = [] recs = env[self.model_name] for name in self.related: - fields.append(recs._fields[name]) + field = recs._fields[name] + field.setup(env) recs = recs[name] - for field in fields: - field.setup(env) - - self.related_field = field = fields[-1] + self.related_field = field # check type consistency if self.type != field.type: diff --git a/openerp/models.py b/openerp/models.py index 8123ec694e1..dfc41bf2475 100644 --- a/openerp/models.py +++ b/openerp/models.py @@ -2972,13 +2972,11 @@ class BaseModel(object): def _setup_fields(self, partial=False): """ Setup the fields (dependency triggers, etc). """ for field in self._fields.itervalues(): - if partial and field.manual and \ - field.relational and \ - (field.comodel_name not in self.pool or \ - (field.type == 'one2many' and field.inverse_name not in self.pool[field.comodel_name]._fields)): - # do not set up manual fields that refer to unknown models - continue - field.setup(self.env) + try: + field.setup(self.env) + except Exception: + if not partial: + raise # group fields by compute to determine field.computed_fields fields_by_compute = defaultdict(list)