回滚到以前的迁移时出错
Posted
技术标签:
【中文标题】回滚到以前的迁移时出错【英文标题】:Errors when rolling back to previous migration 【发布时间】:2016-08-26 16:57:25 【问题描述】:这是我目前的状态:
mainapp
[X] 0001_initial
[X] 0002_authorprofile_uuid
[X] 0003_auto_20151107_1243
[X] 0004_article_approved
[X] 0005_auto_20151129_0950
[X] 0006_article_category
[X] 0007_auto_20160501_1601
我想回到 0005。但是,当我运行 /manage.py migrate mainapp 0005_auto_20151129_0950
时,我收到错误 ValueError: The database backend does not accept 0 as a value for AutoField.
这是我在 models.py 中修复的错误,所以我想回到 0005 重新开始,然后重新进行迁移。
class Article(models.Model):
category = models.ForeignKey(Category, default = 1) #trying to add this and set default value. It was first set to 0 but changed it to 1 after it failed
【问题讨论】:
对不起,现在我对真正的问题有了更好的理解。将字段从 Auto 更改为 ForeignKey 后,您似乎最终在该字段中插入了 0。例如,如果您尝试插入零,mysql 不允许在自动字段中使用 0,它会插入下一个自动增量值。所以问题不在于代码,而在于数据,或者在我看来就是这样。 @e4c5 基本上 0007 认为该字段在数据库中,但实际上不是。那里没有专栏。因此,如果我更改默认值,则无法更改,因为该列不存在。如果我尝试删除该字段,它不能因为它不存在 @e4c5 如果我只是通过 SQL 命令添加一列然后迁移到删除它会怎样?然后下降将起作用。 【参考方案1】:我的建议是打开你的 sql 控制台并转储 django_migrations
表。
DELETE FROM django_migrations WHERE app='mainapp'
然后确保迁移/文件夹中的所有文件都已签入版本控制并删除它们!然后做
./manage.py makemigrations mainapp
./manage.py migrate mainapp --fake
如果 --fake 不起作用,那么是时候采取绝望的措施了,--fake-initial
但是当您将应用程序部署到其他地方时,您很可能不得不再次经历这一切过程 :(
【讨论】:
以上是关于回滚到以前的迁移时出错的主要内容,如果未能解决你的问题,请参考以下文章
当单值事件或事务的嵌套 ValueEventListener 失败时,如何在 Firebase Realtime DB for Android 中回滚到以前的状态?