我的Django应用程序有一个requirements.txt文件(显示为here),我用它在我的虚拟环境中安装模块。一切正常。
但是,我现在正尝试将django-mptt从0.6.1升级到最新版本。 (我实际上并不关心升级django-mptt。我只是想升级我的Django版本。但它似乎升级了Django,我必须先升级django-mptt,如here所述。所以我做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")')
完整堆栈跟踪为here。
这是什么错误?是否与我使用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.
编辑:此点下面的部分已于2015年7月6日17:00 UTC添加
作为一项实验,我将基础数据库从MariaDB切换到MySQL(服务器版本:5.6.25)。问题依然存在。我得到的错误是Cannot add foreign key constraint
。完整堆栈跟踪为here。
编辑:此点下面的部分已于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`;
我知道问题是什么。 myapp2_mymodel
对myapp5_mymodel
有一个外键约束。但是当它试图创建这个FK时,它会失败,因为外键的目标还不存在!为什么升级后表创建顺序不同?
答案 0 :(得分:0)