Explorar el Código

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

Loic Bistuer hace 11 años
padre
commit
69d4b1c3ea
Se han modificado 2 ficheros con 14 adiciones y 2 borrados
  1. 3 2
      django/db/migrations/state.py
  2. 11 0
      tests/migrations/test_state.py

+ 3 - 2
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):

+ 11 - 0
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")