From 698981eccb9cf0c67c7a7e59dbef41da02391a18 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Thu, 15 Jan 2015 11:50:37 +0100 Subject: [PATCH] [FIX] fields: do not set the inverse function on a readonly related field This fixes #4681: prevent method copy() to write on the field. --- openerp/addons/test_new_api/models.py | 2 +- openerp/addons/test_new_api/tests/test_new_fields.py | 2 +- openerp/fields.py | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/openerp/addons/test_new_api/models.py b/openerp/addons/test_new_api/models.py index 6a2233427f6..9866c8b6fd4 100644 --- a/openerp/addons/test_new_api/models.py +++ b/openerp/addons/test_new_api/models.py @@ -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') diff --git a/openerp/addons/test_new_api/tests/test_new_fields.py b/openerp/addons/test_new_api/tests/test_new_fields.py index 126a967ba48..6ffeb9b9153 100644 --- a/openerp/addons/test_new_api/tests/test_new_fields.py +++ b/openerp/addons/test_new_api/tests/test_new_fields.py @@ -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) diff --git a/openerp/fields.py b/openerp/fields.py index 0ee30553088..8510dc8dc2d 100644 --- a/openerp/fields.py +++ b/openerp/fields.py @@ -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