我把我的django模型中的一个字段创建为OneToOneField。因此,不可能存储重复的FK值。我认为将OneToOneField改为ForeignKey是解决方案。
当前
class MyModel(models.Model):
...
abc = models.OneToOneField(YourModel, related_name='my_model', blank=True, null=True, on_delete=models.CASCADE)
...未来
class MyModel(models.Model):
...
abc = models.ForeignKey(YourModel, related_name='my_model', blank=True, null=True, on_delete=models.CASCADE)
...问题是迁移时停机。这个模型在我的服务中是一个重要的模型,很多请求甚至会在一瞬间出现。它也有很多数据。
有没有办法不停机就解决这个问题?
我的服务是使用MySQL5.6和django 2.2。
发布于 2021-02-19 10:43:39
备选方案a)
Hmm所以DB关系我看不出有什么区别,那么如果您只是调整模型定义中的字段并修改最初创建该字段的旧迁移怎么办?这样,Django应该认为没有什么新的东西可以应用到原始的OneToOne字段中,并将其作为一个ForeignKey字段来处理。
请先在备份上尝试,看看是否有额外的唯一约束,或者在真正的ForeignKey字段之前,您可能必须在自定义的sql命令中删除。
备选方案b)
使用多个迁移和部署。
首先添加一个新字段(例如,nullable)
abc复制到
abc列和重命名abc_new重命名为abc,并删除abc_new字段H 218F 219的逻辑。https://stackoverflow.com/questions/66275748
复制相似问题