[FIX] models: simplify partial setup of fields, let it crash silently
The setup of relational fields may be problematic, as they may refer to unknown models via custom relational fields. In a partial setup, do not try to skip the field setup, but let it go and silently catch any exception if it crashes.
This commit is contained in:
parent
1da0a0b3a5
commit
89031f5de6
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue