Django migration 新增外键的坑

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值