summaryrefslogtreecommitdiff
path: root/odoo/fields.py
diff options
context:
space:
mode:
Diffstat (limited to 'odoo/fields.py')
-rw-r--r--odoo/fields.py22
1 files changed, 10 insertions, 12 deletions
diff --git a/odoo/fields.py b/odoo/fields.py
index ac8151e183b..ad0c167588f 100644
--- a/odoo/fields.py
+++ b/odoo/fields.py
@@ -437,11 +437,12 @@ class Field(MetaField('DummyField', (object,), {})):
self.related = tuple(self.related.split('.'))
# determine the chain of fields, and make sure they are all set up
- target = model
+ model_name = self.model_name
for name in self.related:
- field = target._fields[name]
- field.setup_full(target)
- target = target[name]
+ field = model.pool[model_name]._fields[name]
+ if field._setup_done != 'full':
+ field.setup_full(model.env[model_name])
+ model_name = field.comodel_name
self.related_field = field
@@ -468,15 +469,12 @@ class Field(MetaField('DummyField', (object,), {})):
if not hasattr(self, attr):
setattr(self, attr, value)
- # special case for states: copy it only for inherited fields
- if not self.states and self.inherited:
- self.states = field.states
-
- # special case for inherited required fields
- if self.inherited and field.required:
- self.required = True
-
+ # special cases of inherited fields
if self.inherited:
+ if not self.states:
+ self.states = field.states
+ if field.required:
+ self.required = True
self._modules.update(field._modules)
if field.depends_context: