[FIX] fields: convert_to_cache() on cached values for relational fields (#14328)

This commit is contained in:
Raphael Collet
2016-11-15 14:45:46 +01:00
committed by GitHub
parent 58f68ccb72
commit 51680426a6
2 changed files with 11 additions and 3 deletions
+7
View File
@@ -323,6 +323,13 @@ class TestAPI(common.TransactionCase):
self.assertEqual(set(partner2.child_ids), set(children2))
self.env.check_cache()
# convert from the cache format to the write format
partner = partner1
partner.country_id, partner.child_ids
data = partner._convert_to_write(partner._cache)
self.assertEqual(data['country_id'], partner.country_id.id)
self.assertEqual(data['child_ids'], [(6, 0, partner.child_ids.ids)])
@mute_logger('openerp.models')
def test_60_prefetch(self):
""" Check the record cache prefetching """
+4 -3
View File
@@ -1723,7 +1723,8 @@ class Many2one(_Relational):
return process(value._ids)
raise ValueError("Wrong value for %s: %r" % (self, value))
elif isinstance(value, tuple):
return process((value[0],))
# value is either a pair (id, name), or a tuple of ids
return process(value[:1])
elif isinstance(value, dict):
return process(record.env[self.comodel_name].new(value)._ids)
else:
@@ -1797,8 +1798,8 @@ class _RelationalMulti(_Relational):
if isinstance(value, BaseModel):
if not validate or (value._name == self.comodel_name):
return process(value._ids)
elif isinstance(value, list):
# value is a list of record ids or commands
elif isinstance(value, (list, tuple)):
# value is a list/tuple of commands, dicts or record ids
comodel = record.env[self.comodel_name]
# determine the value ids; by convention empty on new records
ids = OrderedSet(record[self.name].ids if record.id else ())