diff options
| author | Raphael Collet <rco@odoo.com> | 2020-04-02 06:45:54 +0000 |
|---|---|---|
| committer | Raphael Collet <rco@odoo.com> | 2020-04-03 11:40:27 +0000 |
| commit | 8b94e53084db3d32ec738f4fbf5639e8b6053bb5 (patch) | |
| tree | c447c3bb7c394884661b75f6556f7444ccc70883 /odoo | |
| parent | f3932ea71641773a2d2a0b123494edff9cfe0ac0 (diff) | |
[IMP] core: optimize `field._setup_related_full`
Simply avoid browsing records for models, and use classes instead.
This saves 1% of the total installation time.
X-original-commit: 35ebaea098edeb3d34f77305b09cb36e56ea5a92
Diffstat (limited to 'odoo')
| -rw-r--r-- | odoo/fields.py | 22 |
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: |
