升级版本django-mptt后为什么会出现此数据库迁移错误?

Saq*_*Ali 14 mysql django database-migration django-models django-mptt

我的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从origin到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")')
Run Code Online (Sandbox Code Playgroud)

完整堆栈跟踪在这里.

这个错误是什么?是否与我使用MariaDB(服务器版本:10.0.15-MariaDB Homebrew)而不是MySQL作为我的数据库这一事实有关?

在此输入图像描述

编辑:以下部分该点已于2015年7月6日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.
Run Code Online (Sandbox Code Playgroud)

编辑:以下部分该部分已于2015年7月6日17:00 UTC加入

作为实验,我将基础数据库从MariaDB切换到MySQL(服务器版本:5.6.25).问题依然存在.我得到的错误是Cannot add foreign key constraint.完整的堆栈跟踪在这里.

编辑:这个点以下这个点在2015年7月6日在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`;
Run Code Online (Sandbox Code Playgroud)

我知道问题是什么.myapp2_mymodel有一个外键约束myapp5_mymodel.但是当它尝试创建此FK时,它会失败,因为外键的目标尚不存在!为什么升级后表创建顺序不同?

Saq*_*Ali 0

我自己解决了这个问题。看起来我的 Django 应用程序之一缺少 myapp2 缺少迁移文件夹。我修好了它,一切开始正常工作。