Я использую Django == 1.7, и четыре приложения:Почему миграция терпит неудачу при тестировании, но не переносится?
frontend
game
geo
people
приложений настройки, как это:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'fandjango',
'people',
'geo',
'game',
'frontend'
)
и настройки баз данных:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'hoods_raising',
'USER': 'hoods_raising',
'PASSWORD': 'hr$nestor$123',
'HOST': 'localhost',
'TEST_CHARSET': 'utf8mb4'
}
}
Мое приложение имеет миграцию и тесты:
game
migrations
0001_initial.py
geo
migrations
0001_initial.py
tests.py
people
migrations
0001_initial.py
0002_install_data.py
Многие файлы были опущены, чтобы сузить проблему (я разберу вопрос с большим количеством файлов, если это необходимо), например. models.py
, views.py
.
Содержание 0002_install_data.py
являются:
class Migration(migrations.Migration):
dependencies = [
('people', '0001_initial'),
]
operations = [
migrations.RunPython(NamesInstaller(), lambda apps, schema_editor: None)
]
Если я бегу manage.py migrate
установить базу данных, все работает, как ожидалось.
Если я запустил manage.py test
для запуска тестов, первым шагом будет установка тестовой базы данных. Что-то странное случается:
Первой миграцией, которая будет выполнена, является 0002_install_data. Другие таблицы никогда не создаются (например, таблицы auth, таблицы географии, таблицы игр, таблицы fandjango, ...) и миграция 0001_initial вpeople
не запускается.Для такой причины, ошибка зависимости возникает в0002_install_data
(он говорит, что0001_initial
не существует).KeyError: u"Migration people.0002_install_data dependencies references nonexistent parent node (u'people', u'0001_initial')"
Почему это могло случиться? Почему команда test
не устраивает корректные миграции приложений? (это не произошло на manage.py migrate
).
из [документы] (https://docs.djangoproject.com/en/1.8/topics/migrations/): '' 'После того, как вы раздавлены миграцию, то вы должны совершить его вместе с миграциями он заменяет и распространяет это изменение на все запущенные экземпляры вашего приложения, следя за тем, чтобы они выполняли миграцию для сохранения изменений в своей базе данных. После того, как это было сделано, вы должны перевести сжатую миграцию в обычную начальную миграцию, используя ... '' ' – Hussam