Fixed #22331 -- Fixed migrations ProjectState to ignore unmanaged models.

This commit is contained in:
Loic Bistuer 2014-03-25 22:02:51 +08:00 committed by Tim Graham
parent 86dcac4634
commit 69d4b1c3ea
2 changed files with 14 additions and 2 deletions

View File

@ -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):

View File

@ -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")