[FIX] fields: do not set the inverse function on a readonly related field

This fixes #4681: prevent method copy() to write on the field.
This commit is contained in:
Raphael Collet 2015-01-15 11:50:37 +01:00
parent 09ac43ea99
commit 698981eccb
3 changed files with 4 additions and 3 deletions

View File

@ -106,7 +106,7 @@ class Message(models.Model):
display_name = fields.Char(string='Abstract', compute='_compute_display_name')
size = fields.Integer(compute='_compute_size', search='_search_size')
double_size = fields.Integer(compute='_compute_double_size')
discussion_name = fields.Char(related='discussion.name', readonly=True)
discussion_name = fields.Char(related='discussion.name')
@api.one
@api.constrains('author', 'discussion')

View File

@ -294,7 +294,7 @@ class TestNewFields(common.TransactionCase):
# by default related fields are not stored
field = message._fields['discussion_name']
self.assertFalse(field.store)
self.assertTrue(field.readonly)
self.assertFalse(field.readonly)
# check value of related field
self.assertEqual(message.discussion_name, discussion.name)

View File

@ -460,7 +460,8 @@ class Field(object):
# determine dependencies, compute, inverse, and search
self.depends = ('.'.join(self.related),)
self.compute = self._compute_related
self.inverse = self._inverse_related
if not (self.readonly or field.readonly):
self.inverse = self._inverse_related
if field._description_searchable:
# allow searching on self only if the related field is searchable
self.search = self._search_related