From ec2263080abba3b5385b13d381e8c934ef8f5657 Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Thu, 10 Jan 2019 14:47:10 +0000 Subject: [PATCH] [FIX] fields: inherited fields keep parent's modules On a field created through a _inherits, the fields on the child model did not benefit from the parent _modules information. If two models are created in module base class Partner(models.Model): _name = 'res.partner' class User(models.Model): _inherits = {'res.partner': 'partner_id'} partner_id = fields.Many2one('res.partner') and a second module auth_signup adds a field on the parent model class ResPartner(models.Model): _inherit = 'res.partner' signup_token = fields.Char() Both res.users and res.partner should have an ir.model.data create base_setup.field_res_partner__signup_token was correctly created but base_setup.field_res_users__signup_token was not created The reason is was, in the call to _reflect_model, since 574f4c3deb2671b7, the creation of ir.model.data is based on the field._modules However, the field res.partner.signup_token did not propagate its _modules value to the related field res.users.signup_token With this patch, both ir.model.data are created. This allow a proper uninstallation of fields as well as translation. --- odoo/fields.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/odoo/fields.py b/odoo/fields.py index 1ea869f46a2..f054bf5a90c 100644 --- a/odoo/fields.py +++ b/odoo/fields.py @@ -560,6 +560,9 @@ class Field(MetaField('DummyField', (object,), {})): if self.inherited and field.required: self.required = True + if self.inherited: + self._modules.update(field._modules) + def traverse_related(self, record): """ Traverse the fields of the related field `self` except for the last one, and return it as a pair `(last_record, last_field)`. """