Change initial migration writing to work as docs suggest.

Application template now includes an empty migrations module, and
the autodetector will only make initial migrations for apps with
empty modules.
This commit is contained in:
Andrew Godwin 2013-11-27 12:34:31 +00:00
parent db4527e3c0
commit 96dd48c83f
2 changed files with 15 additions and 7 deletions

View File

@ -1,6 +1,7 @@
import re import re
import os
import sys import sys
from django.utils import datetime_safe from django.utils import datetime_safe, importlib
from django.utils.six.moves import input from django.utils.six.moves import input
from django.db.migrations import operations from django.db.migrations import operations
from django.db.migrations.migration import Migration from django.db.migrations.migration import Migration
@ -410,15 +411,22 @@ class InteractiveMigrationQuestioner(MigrationQuestioner):
def ask_initial(self, app_label): def ask_initial(self, app_label):
"Should we create an initial migration for the app?" "Should we create an initial migration for the app?"
# Don't ask for django.contrib apps
app = cache.get_app(app_label)
if app.__name__.startswith("django.contrib"):
return False
# If it was specified on the command line, definitely true # If it was specified on the command line, definitely true
if app_label in self.specified_apps: if app_label in self.specified_apps:
return True return True
# Now ask # Otherwise, we look to see if it has a migrations module
return self._boolean_input("Do you want to enable migrations for app '%s'? [y/N]" % app_label, False) # without any Python files in it, apart from __init__.py.
# Apps from the new app template will have these; the python
# file check will ensure we skip South ones.
models_module = cache.get_app(app_label)
migrations_import_path = "%s.migrations" % models_module.__package__
try:
migrations_module = importlib.import_module(migrations_import_path)
except ImportError:
return False
else:
filenames = os.listdir(os.path.dirname(migrations_module.__file__))
return not any(x.endswith(".py") for x in filenames if x != "__init__.py")
def ask_not_null_addition(self, field_name, model_name): def ask_not_null_addition(self, field_name, model_name):
"Adding a NOT NULL field to a model" "Adding a NOT NULL field to a model"