Skip to content

Commit

Permalink
[IMP] fields: check for inconsistent many2many definitions
Browse files Browse the repository at this point in the history
closes #29323
  • Loading branch information
rco-odoo committed Jan 16, 2019
1 parent b7e13cf commit 05861ff
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 1 deletion.
1 change: 1 addition & 0 deletions odoo/addons/test_new_api/ir.model.access.csv
Expand Up @@ -5,6 +5,7 @@ access_message,test_new_api_message,test_new_api.model_test_new_api_message,,1,1
access_emailmessage,test_new_api_emailmessage,test_new_api.model_test_new_api_emailmessage,,1,1,1,1
access_multi,test_new_api_multi,test_new_api.model_test_new_api_multi,,1,1,1,1
access_multi_line,test_new_api_multi_line,test_new_api.model_test_new_api_multi_line,,1,1,1,1
access_multi_line2,test_new_api_multi_line2,test_new_api.model_test_new_api_multi_line2,,1,1,1,1
access_multi_tag,test_new_api_multi_tag,test_new_api.model_test_new_api_multi_tag,,1,1,1,1
access_creativework_edition,test_new_api_creativework_edition,model_test_new_api_creativework_edition,,1,1,1,1
access_creativework_book,test_new_api_creativework_book,model_test_new_api_creativework_book,,1,1,1,1
Expand Down
5 changes: 5 additions & 0 deletions odoo/addons/test_new_api/models.py
Expand Up @@ -225,6 +225,11 @@ class MultiLine(models.Model):
tags = fields.Many2many('test_new_api.multi.tag')


class MultiLine2(models.Model):
_name = 'test_new_api.multi.line2'
_inherit = 'test_new_api.multi.line'


class MultiTag(models.Model):
_name = 'test_new_api.multi.tag'
_description = 'Test New API Multi Tag'
Expand Down
12 changes: 12 additions & 0 deletions odoo/addons/test_new_api/tests/test_new_fields.py
Expand Up @@ -1104,6 +1104,18 @@ def test_93_monetary_related(self):


class TestX2many(common.TransactionCase):
def test_definition_many2many(self):
""" Test the definition of inherited many2many fields. """
field = self.env['test_new_api.multi.line']._fields['tags']
self.assertEqual(field.relation, 'test_new_api_multi_line_test_new_api_multi_tag_rel')
self.assertEqual(field.column1, 'test_new_api_multi_line_id')
self.assertEqual(field.column2, 'test_new_api_multi_tag_id')

field = self.env['test_new_api.multi.line2']._fields['tags']
self.assertEqual(field.relation, 'test_new_api_multi_line2_test_new_api_multi_tag_rel')
self.assertEqual(field.column1, 'test_new_api_multi_line2_id')
self.assertEqual(field.column2, 'test_new_api_multi_tag_id')

def test_search_many2many(self):
""" Tests search on many2many fields. """
tags = self.env['test_new_api.multi.tag']
Expand Down
6 changes: 5 additions & 1 deletion odoo/fields.py
Expand Up @@ -2557,8 +2557,12 @@ def _setup_regular_full(self, model):
comodel = model.env[self.comodel_name]
model._field_inverses.add(self, invf)
comodel._field_inverses.add(invf, self)
else:

elif model._auto:
# add self in m2m, so that its inverse field can find it
if (self.relation, self.column1, self.column2) in m2m:
msg = "Many2many fields %s and %s use the same table and columns"
raise TypeError(msg % (self, m2m[(self.relation, self.column1, self.column2)]))
m2m[(self.relation, self.column1, self.column2)] = self

def update_db(self, model, columns):
Expand Down

0 comments on commit 05861ff

Please sign in to comment.