在添加不可为空的字段外国并填充字段后,如何恢复未完成的makemigration

如何解决在添加不可为空的字段外国并填充字段后,如何恢复未完成的makemigration

我犯了一个错误,即添加一个非nullablle字段并将其填充为1。

contest = models.ForeignKey(Contest,on_delete=models.CASCADE)

(比赛为空,新建表格)

 >>> python manage.py makemigrations contests
You are trying to add a non-nullable field 'contest' to contestentry without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default Now (will be set on all existing rows with a null value for this column)
 2) Quit,and let me add a default in models.py
Select an option: 1
Please enter the default value Now,as valid Python
The datetime and django.utils.timezone modules are available,so you can do e.g. timezone.Now
Type 'exit' to exit this prompt
>>> 1

由于模型表为空,因此迁移时出现错误

>>> python manage.py migrate contests 
psycopg2.errors.Foreignkeyviolation: insert or update on table "contests_contestentry" violates foreign key constraint "contests_contestentr_contest_id_7f53b874_fk_contests_"
DETAIL:  Key (contest_id)=(1) is not present in table "contests_contest".

删除了该字段并尝试向后迁移,但没有成功,然后我尝试还原迁移,但出现以下错误

>>> python manage.py migrate contests 0007_remove_contestentry_nVotes

    Operations to perform:
      Target specific migration: 0007_remove_contestentry_nVotes,from contests
    Running migrations:
      No migrations to apply.
      Your models have changes that are not yet reflected in a migration,and so won't be applied.
      Run 'manage.py makemigrations' to make new migrations,and then re-run 'manage.py migrate' to apply them.

如何恢复为migration_007,然后将该字段设置为能够在数据库中为空?

解决方法

您可以通过迁移到上一个迁移来还原。

例如,如果您最近的两次迁移是:

0010_previous_migration
0011_migration_to_revert

Then you would do:

./manage.py migrate my_app 0010_previous_migration 

然后您可以删除迁移0011_migration_to_revert。

对于空模型:

contest = models.ForeignKey(Contest,on_delete=models.CASCADE,blank=true)
,

我通过删除应用名称/迁移中的迁移来解决此问题,删除了有冲突的代码,然后再次运行makemigrations迁移

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?