TL;DR
永远不要相信 makemigrations!
migrate 之前一定好好看看 migrate 了啥东西,必要时手动修改生成的 migrate 文件。
最好把db的更新与服务代码更新解耦
场景
先描述下场景:
现在有两个表,一个是 question,一个是 choice,其中 question 和 choice 是一对多的关系,其中 choice 表中会记录 question_id(此时不是外键约束)。
class Question(models.Model):
content = models.CharField(max_length=256, blank=True, default='')
class Choice(models.Model):
content = models.CharField(max_length=256, default='')
question_id = models.IntegerField(null=True)
现在我想把 question_id 改为外键,所以很自然的改写 model:
class Question(models.Model):
content = models.CharField(max_length=256

文章讲述了在Django中,如何避免makemigrations自动迁移时的问题,特别是在将非外键字段改为外键时,需手动调整迁移文件并确保数据一致性。作者提供了使用RunPython和RunSQL的解决方案,强调了db更新与服务代码解耦的重要性以及使用sqlmigrate进行SQL审查的建议。
最低0.47元/天 解锁文章
1289





