Почему эта ошибка миграции базы данных после обновления моей версии 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, отсутствовала папка миграции. Я починил его, и все стало работать нормально.