[FIX] fields: convert_to_cache() on cached values for relational fields (#14328)
This commit is contained in:
@@ -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
@@ -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 ())
|
||||
|
||||
Reference in New Issue
Block a user