Почему эта ошибка миграции базы данных после обновления моей версии django-mptt?

У моего приложения Django есть файл require.txt (показанный здесь), который я использую для установки модулей в моей виртуальной среде. Все отлично работает

Однако сейчас я пытаюсь обновить django-mptt с версии 0.6.1 до последней версии. (На самом деле я не хочу обновлять django-mptt. Я просто хочу обновить свою версию Django. Но похоже, что для обновления Django я должен сначала обновить django-mptt, как описано здесь). Так и делаю pip install -U django-mptt, Это приводит к тому, что django-mptt меняется с 0.6.1 до 0.7.4, а Django - с 1.7.1 до 1.8.2. И это также приводит к тому, что django-cache-machine переходит от источника к мастеру. Вы можете увидеть изменения на скриншоте ниже.

Потом когда я manage.py runserver Затем он побуждает меня мигрировать. Я так и делаю. Нет проблем. Однако впоследствии, если я отбрасываю все таблицы и затем снова запускаю миграцию, я получаю эту ошибку во время миграции:

django.db.utils.OperationalError: 
(1005, 'Can\'t create table `mydb_instance`.`#sql-21b_1e` 
(errno: 150 "Foreign key constraint is incorrectly formed")')

Полная трассировка стека здесь.

Что это за ошибка? Связано ли это с тем, что я использую MariaDB (версия сервера: 10.0.15-MariaDB Homebrew) вместо MySQL в качестве базы данных?

РЕДАКТИРОВАТЬ: часть ниже этой точки был добавлен 6,2015 июля в 5:28 UTC

Я упоминал выше, что после обновления мне предложили выполнить миграцию. Как ни странно, это произошло, хотя обновление MPTT не приводит к созданию новых файлов миграции! Когда я сделал manage.py runserverЯ получил следующее предупреждение. Зачем? Это не имеет никакого смысла:

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

РЕДАКТИРОВАТЬ: часть ниже этой точки была добавлена ​​6,2015 июля в 17:00 UTC

В качестве эксперимента я переключил базовую базу данных с MariaDB на MySQL (версия сервера: 5.6.25). Проблема сохранилась. Ошибка, которую я получил, была Cannot add foreign key constraint, Полная трассировка стека здесь.

РЕДАКТИРОВАТЬ: часть ниже этой точки была добавлена ​​6 июля 2015 года в 17:05 UTC

Проходя трассировку стека, которую я опубликовал 5 минут назад, я обнаружил, что ошибка вызывается следующим оператором SQL:

ALTER TABLE `myapp2_mymodel2` ADD CONSTRAINT `mymod_mymodel5_id_335ee73cecd6ecbf_fk_myapp5_mymodel5_id` FOREIGN KEY (`mymodel5_id`) REFERENCES `myapp5_mymodel5`;

Я вижу, в чем проблема. myapp2_mymodel имеет ограничение внешнего ключа myapp5_mymodel, Однако, когда он пытается создать этот FK, он терпит неудачу, потому что цель внешнего ключа еще не существует! Почему порядок создания таблиц меняется после обновления?

1 ответ

Решение

Я решил проблему сам. Похоже, что в одном из моих приложений Django не хватало myapp2, отсутствовала папка миграции. Я починил его, и все стало работать нормально.

Другие вопросы по тегам