#29092: Issues with ManyToMany Models for different apps with same table names
-------------------------------------------------+------------------------
Reporter: Elizaveta Kishchukova | Owner: nobody
Type: Uncategorized | Status: new
Component: Uncategorized | Version: 1.11
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------------------+------------------------
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.
--
Ticket URL: <https://code.djangoproject.com/ticket/29092>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/049.b8af9d5d0743637b4616b0961345a8b0%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.