Ответ 1
Я сам решил проблему. Похоже, что у одного из моих приложений Django не хватало myapp2 папки с миграцией. Я отремонтировал его, и все стало нормально работать.
В моем приложении Django есть файл requirements.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 работает от источника до master. Вы можете увидеть изменения на скриншоте ниже.
Затем, когда я делаю 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 июля 2010 года в 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 ИЮЛЯ 2005 ГОДА в 17:00 UTC
В качестве эксперимента я отключил базовую базу данных от MariaDB до MySQL (версия сервера: 5.6.25). Проблема продолжалась. Ошибка, которую я получил, была Cannot add foreign key constraint
. Полная трассировка стека здесь.
РЕДАКТИРОВАТЬ: ПАРАМЕТРА НИЖЕ ЭТОТ ТОЧКА БЫЛА ДОБАВЛЕНА 6 ИЮЛЯ 2005 ГОДА в 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, он терпит неудачу, потому что цель внешнего ключа еще не существует! Почему порядок создания таблицы отличается после обновления?
Я сам решил проблему. Похоже, что у одного из моих приложений Django не хватало myapp2 папки с миграцией. Я отремонтировал его, и все стало нормально работать.