如何解决在添加不可为空的字段外国并填充字段后,如何恢复未完成的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 举报,一经查实,本站将立刻删除。