diff --git a/odoo/addons/base/models/ir_model.py b/odoo/addons/base/models/ir_model.py index 45d5dae8301..d17116bd38f 100644 --- a/odoo/addons/base/models/ir_model.py +++ b/odoo/addons/base/models/ir_model.py @@ -623,12 +623,16 @@ class IrModelFields(models.Model): continue model = self.env.get(field.model) is_model = model is not None - if is_model and tools.column_exists(self._cr, model._table, field.name) and \ - tools.table_kind(self._cr, model._table) == 'r': - self._cr.execute('ALTER TABLE "%s" DROP COLUMN "%s" CASCADE' % (model._table, field.name)) - if field.state == 'manual' and field.ttype == 'many2many': - rel_name = field.relation_table or (is_model and model._fields[field.name].relation) - tables_to_drop.add(rel_name) + if field.store: + # TODO: Refactor this brol in master + if is_model and tools.column_exists(self._cr, model._table, field.name) and \ + tools.table_kind(self._cr, model._table) == 'r': + self._cr.execute('ALTER TABLE "%s" DROP COLUMN "%s" CASCADE' % ( + model._table, field.name, + )) + if field.state == 'manual' and field.ttype == 'many2many': + rel_name = field.relation_table or (is_model and model._fields[field.name].relation) + tables_to_drop.add(rel_name) if field.state == 'manual' and is_model: model._pop_field(field.name) if field.translate: diff --git a/odoo/addons/test_new_api/tests/test_new_fields.py b/odoo/addons/test_new_api/tests/test_new_fields.py index 0712e088f78..3204b25bfe6 100644 --- a/odoo/addons/test_new_api/tests/test_new_fields.py +++ b/odoo/addons/test_new_api/tests/test_new_fields.py @@ -2037,6 +2037,18 @@ class TestX2many(common.TransactionCase): for line in lines: self.assertEqual(len(line.tags), 3) + def test_custom_m2m(self): + model_id = self.env['ir.model']._get_id('res.partner') + field = self.env['ir.model.fields'].create({ + 'name': 'x_foo', + 'field_description': 'Foo', + 'model_id': model_id, + 'ttype': 'many2many', + 'relation': 'res.country', + 'store': False, + }) + self.assertTrue(field.unlink()) + class TestHtmlField(common.TransactionCase):