[FIX] fields: fix assignment of related field on several records
This commit is contained in:
parent
446d59fd44
commit
a9c43bba82
|
@ -309,6 +309,19 @@ class TestNewFields(common.TransactionCase):
|
|||
self.assertEqual(discussion.name, 'Bar')
|
||||
self.assertEqual(message.discussion_name, 'Bar')
|
||||
|
||||
# change discussion name via related field on several records
|
||||
discussion1 = discussion.create({'name': 'X1'})
|
||||
discussion2 = discussion.create({'name': 'X2'})
|
||||
discussion1.participants = discussion2.participants = self.env.user
|
||||
message1 = message.create({'discussion': discussion1.id})
|
||||
message2 = message.create({'discussion': discussion2.id})
|
||||
self.assertEqual(message1.discussion_name, 'X1')
|
||||
self.assertEqual(message2.discussion_name, 'X2')
|
||||
|
||||
(message1 + message2).write({'discussion_name': 'X3'})
|
||||
self.assertEqual(discussion1.name, 'X3')
|
||||
self.assertEqual(discussion2.name, 'X3')
|
||||
|
||||
# search on related field, and check result
|
||||
search_on_related = self.env['test_new_api.message'].search([('discussion_name', '=', 'Bar')])
|
||||
search_on_regular = self.env['test_new_api.message'].search([('discussion.name', '=', 'Bar')])
|
||||
|
|
|
@ -548,13 +548,15 @@ class Field(object):
|
|||
|
||||
def _inverse_related(self, records):
|
||||
""" Inverse the related field ``self`` on ``records``. """
|
||||
# store record values, otherwise they may be lost by cache invalidation!
|
||||
record_value = {record: record[self.name] for record in records}
|
||||
for record in records:
|
||||
other = record
|
||||
# traverse the intermediate fields, and keep at most one record
|
||||
for name in self.related[:-1]:
|
||||
other = other[name][:1]
|
||||
if other:
|
||||
other[self.related[-1]] = record[self.name]
|
||||
other[self.related[-1]] = record_value[record]
|
||||
|
||||
def _search_related(self, records, operator, value):
|
||||
""" Determine the domain to search on field ``self``. """
|
||||
|
|
Loading…
Reference in New Issue