diff --git a/django/db/migrations/questioner.py b/django/db/migrations/questioner.py index aef80f4a52..47d4cdf130 100644 --- a/django/db/migrations/questioner.py +++ b/django/db/migrations/questioner.py @@ -38,6 +38,9 @@ class MigrationQuestioner(object): except LookupError: # It's a fake app. return self.defaults.get("ask_initial", False) migrations_import_path = MigrationLoader.migrations_module(app_config.label) + if migrations_import_path is None: + # It's an application with migrations disabled. + return self.defaults.get("ask_initial", False) try: migrations_module = importlib.import_module(migrations_import_path) except ImportError: diff --git a/docs/releases/1.9.2.txt b/docs/releases/1.9.2.txt index e64c62e3da..1612a938a2 100644 --- a/docs/releases/1.9.2.txt +++ b/docs/releases/1.9.2.txt @@ -71,3 +71,7 @@ Bugfixes * Fixed a crash when using a reverse ``OneToOneField`` in ``ModelAdmin.readonly_fields`` (:ticket:`26060`). + +* Fixed a crash when calling the ``migrate`` command in a test case with the + ``available_apps`` attribute pointing to an application with migrations + disabled using the ``MIGRATION_MODULES`` setting (:ticket:`26135`). diff --git a/tests/migrations/test_questioner.py b/tests/migrations/test_questioner.py new file mode 100644 index 0000000000..d5ba18a684 --- /dev/null +++ b/tests/migrations/test_questioner.py @@ -0,0 +1,15 @@ +from __future__ import unicode_literals + +from django.db.migrations.questioner import MigrationQuestioner +from django.test import SimpleTestCase +from django.test.utils import override_settings + + +class QuestionerTests(SimpleTestCase): + @override_settings( + INSTALLED_APPS=['migrations'], + MIGRATION_MODULES={'migrations': None}, + ) + def test_ask_initial_with_disabled_migrations(self): + questioner = MigrationQuestioner() + self.assertIs(False, questioner.ask_initial('migrations'))