summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Bistuer <loic.bistuer@gmail.com>2014-03-25 22:02:51 +0800
committerTim Graham <timograham@gmail.com>2014-03-25 10:34:28 -0400
commitbf69375c4d2eaec4f00c646b9e7e84a9397d1a20 (patch)
treedde8f2037ade7c5b060a71c05c5e36ef5e924980
parentddcbde41eec12f7a84b00635cdbf1c93d4e4d297 (diff)
[1.7.x] Fixed #22331 -- Fixed migrations ProjectState to ignore unmanaged models.
Backport of 69d4b1c3ea from master
-rw-r--r--django/db/migrations/state.py5
-rw-r--r--tests/migrations/test_state.py11
2 files changed, 14 insertions, 2 deletions
diff --git a/django/db/migrations/state.py b/django/db/migrations/state.py
index ab2bd8e6d8..01019ff980 100644
--- a/django/db/migrations/state.py
+++ b/django/db/migrations/state.py
@@ -58,8 +58,9 @@ class ProjectState(object):
"Takes in an Apps and returns a ProjectState matching it"
app_models = {}
for model in apps.get_models():
- model_state = ModelState.from_model(model)
- app_models[(model_state.app_label, model_state.name.lower())] = model_state
+ if model._meta.managed:
+ model_state = ModelState.from_model(model)
+ app_models[(model_state.app_label, model_state.name.lower())] = model_state
return cls(app_models)
def __eq__(self, other):
diff --git a/tests/migrations/test_state.py b/tests/migrations/test_state.py
index 10f5e7d9ab..80ae8922bf 100644
--- a/tests/migrations/test_state.py
+++ b/tests/migrations/test_state.py
@@ -52,11 +52,22 @@ class StateTests(TestCase):
verbose_name = "tome"
db_table = "test_tome"
+ class Unmanaged(models.Model):
+ title = models.CharField(max_length=1000)
+
+ class Meta:
+ app_label = "migrations"
+ apps = new_apps
+ managed = False
+
project_state = ProjectState.from_apps(new_apps)
author_state = project_state.models['migrations', 'author']
author_proxy_state = project_state.models['migrations', 'authorproxy']
sub_author_state = project_state.models['migrations', 'subauthor']
book_state = project_state.models['migrations', 'book']
+ # unmanaged models should not appear in migrations
+ with self.assertRaises(KeyError):
+ project_state.models['migrations', 'unmanaged']
self.assertEqual(author_state.app_label, "migrations")
self.assertEqual(author_state.name, "Author")