summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Meyer <carl@oddbird.net>2014-09-12 15:33:48 -0600
committerCarl Meyer <carl@oddbird.net>2014-09-12 15:34:42 -0600
commitac1adfbe4a822a3347401f574e64f83e36128cec (patch)
tree641a98860b7ddeb655cd3e382e7234590621ec53
parent7de55fa68e694b84e5ea9c383d87153b5be0d43a (diff)
[1.7.x] Fixed #23483 -- Prevented ImproperlyConfigured with dotted app names
Made sure the app labels stay unique for the AppConfigStubs, so migrations wouldn't fail if two dotted app names has the same last part (e.g. django.contrib.auth and vendor.auth) Backport of 5e32605ce9 from master.
-rw-r--r--django/db/migrations/state.py1
-rw-r--r--tests/migrations/test_state.py21
2 files changed, 22 insertions, 0 deletions
diff --git a/django/db/migrations/state.py b/django/db/migrations/state.py
index ab4aaf6e3e..1328b41b7b 100644
--- a/django/db/migrations/state.py
+++ b/django/db/migrations/state.py
@@ -124,6 +124,7 @@ class AppConfigStub(AppConfig):
path = ''
def __init__(self, label):
+ self.label = label
super(AppConfigStub, self).__init__(label, None)
def import_models(self, all_models):
diff --git a/tests/migrations/test_state.py b/tests/migrations/test_state.py
index ebeaffb787..db94413bac 100644
--- a/tests/migrations/test_state.py
+++ b/tests/migrations/test_state.py
@@ -254,6 +254,27 @@ class StateTests(TestCase):
with self.assertRaises(InvalidBasesError):
project_state.render()
+ def test_render_unique_app_labels(self):
+ """
+ Tests that the ProjectState render method doesn't raise an
+ ImproperlyConfigured exception about unique labels if two dotted app
+ names have the same last part.
+ """
+ class A(models.Model):
+ class Meta:
+ app_label = "django.contrib.auth"
+
+ class B(models.Model):
+ class Meta:
+ app_label = "vendor.auth"
+
+ # Make a ProjectState and render it
+ project_state = ProjectState()
+ project_state.add_model_state(ModelState.from_model(A))
+ project_state.add_model_state(ModelState.from_model(B))
+ final_apps = project_state.render()
+ self.assertEqual(len(final_apps.get_models()), 2)
+
def test_equality(self):
"""
Tests that == and != are implemented correctly.