﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
29092	Issues with ManyToMany Models for different apps with same table names	Elizaveta Kishchukova	nobody	"This code results in errors during integrity checks when there are apps using models with same m2m table name.

in django/db/models/fields/related.py, lines 1441-1453:
{{{
    def _check_table_uniqueness(self, **kwargs):
        if isinstance(self.remote_field.through, six.string_types) or not self.remote_field.through._meta.managed:
            return []
        registered_tables = {
            model._meta.db_table: model
            for model in self.opts.apps.get_models(include_auto_created=True)
            if model != self.remote_field.through and model._meta.managed
        }    
        m2m_db_table = self.m2m_db_table()
        model = registered_tables.get(m2m_db_table)
        # The second condition allows multiple m2m relations on a model if
        # some point to a through model that proxies another through model.
        if model and model._meta.concrete_model != self.remote_field.through._meta.concrete_model:
}}}

Example:

Set up:
app1.SomeModel with table name ""some_table_name"" (using database 1)
app2.SomeModel with table name ""some_table_name"" (using database 2)
app1.Y with field xs = models.ManyToManyField('X', through='SomeModel')
app2.Y with field xs = models.ManyToManyField('X', through='SomeModel')

{{{
ERRORS: 
app1.Y.xs: (fields.E340) The field's intermediary table 'some_table_name' clashes with the table name of 'app2.SomeModel'.
app2.Y.xs: (fields.E340) The field's intermediary table 'some_table_name' clashes with the table name of 'app1.SomeModel'.
}}}

Notice how it compares models of **different apps**. This dictionary ought to at least use something like 'app_name.table_name' for key."	Uncategorized	new	Uncategorized	1.11	Normal				Unreviewed	0	0	0	0	0	0
