diff options
| author | Christophe Simonis <chs@odoo.com> | 2017-10-10 18:31:39 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2017-10-10 18:36:34 +0200 |
| commit | e1104ac344cbc349a46b22339b13dfe9cbab8bcb (patch) | |
| tree | 801ecf5467098f7488cd59a3a8901f885299c6bb | |
| parent | ee73f6a0285a0e3f272355bd1d51bb121d51ab0e (diff) | |
[FIX] core: revert cb1cfadda23cc1e1d73f4ef854ec82c294febd09
Due to Cache reimplementation, this commit can't be applied as-it in
version 11.0 and need to be adapted correctly.
Undo PR #19963
| -rw-r--r-- | odoo/fields.py | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/odoo/fields.py b/odoo/fields.py index bef9ba4302a..f04c4139b6f 100644 --- a/odoo/fields.py +++ b/odoo/fields.py @@ -39,23 +39,18 @@ Default = object() # default value for __init__() methods def copy_cache(records, env): """ Recursively copy the cache of ``records`` to the environment ``env``. """ - src = records.env - todo = defaultdict(set) # {model_name: ids} - done = defaultdict(set) # {model_name: ids} - todo[records._name].update(records._ids) + src, dst = records.env.cache, env.cache + todo, done = set(records), set() while todo: - model_name = next(iter(todo)) - record_ids = todo.pop(model_name) - done[model_name] - done[model_name].update(record_ids) - for name, field in src[model_name]._fields.items(): - src_cache = src.cache[field] - dst_cache = env.cache[field] - for record_id in record_ids: - if record_id in src_cache: - # copy the cached value as such - value = dst_cache[record_id] = src_cache[record_id] - if field.relational and isinstance(value, tuple): - todo[field.comodel_name].update(value) + record = todo.pop() + if record not in done: + done.add(record) + target = record.with_env(env) + for field in src.get_fields(record): + value = src.get(record, field) + dst.set(target, field, value) + if value and field.type in ('many2one', 'one2many', 'many2many', 'reference'): + todo.update(field.convert_to_record(value, record)) def resolve_mro(model, name, predicate): |
