diff --git a/addons/mail/models/mail_tracking_value.py b/addons/mail/models/mail_tracking_value.py index 707f3f6bd75..570757a6534 100644 --- a/addons/mail/models/mail_tracking_value.py +++ b/addons/mail/models/mail_tracking_value.py @@ -40,7 +40,9 @@ class MailTracking(models.Model): def _compute_groups(self): for tracking in self: model = self.env[tracking.mail_message_id.model] - tracking.groups = model._fields[tracking.field].groups + field = model._fields.get(tracking.field) + # field may not exist anymore if module has been uninstalled + tracking.groups = field.groups if field else 'base.group_system' @api.model def create_tracking_values(self, initial_value, new_value, col_name, col_info, tracking_sequence): diff --git a/addons/test_mail/tests/test_message_track.py b/addons/test_mail/tests/test_message_track.py index 5906e7c0543..7055fe69bc9 100644 --- a/addons/test_mail/tests/test_message_track.py +++ b/addons/test_mail/tests/test_message_track.py @@ -149,3 +149,9 @@ class TestTracking(common.BaseFunctionalTest, common.MockEmails): msg_admin = self.partner_admin.sudo(self.user_admin)._notify_prepare_template_context(self.record.message_ids, self.record) self.assertFalse(msg_emp.get('tracking_values'), "should not have protected tracking values") self.assertTrue(msg_admin.get('tracking_values'), "should have protected tracking values") + + def test_unknown_field(self): + self.record.sudo().write({'email_from': 'X'}) # create a tracking value + tracking = self.record.sudo().mapped('message_ids.tracking_value_ids')[0] + tracking.field = 'I do not exist' + self.assertEqual(tracking.groups, 'base.group_system')