首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django模型将OneToOneField更改为没有DownTime的ForeignKey

django模型将OneToOneField更改为没有DownTime的ForeignKey
EN

Stack Overflow用户
提问于 2021-02-19 10:22:47
回答 1查看 510关注 0票数 0

我把我的django模型中的一个字段创建为OneToOneField。因此,不可能存储重复的FK值。我认为将OneToOneField改为ForeignKey是解决方案。

当前

代码语言:javascript
复制
class MyModel(models.Model):
    ...
    abc = models.OneToOneField(YourModel, related_name='my_model', blank=True, null=True, on_delete=models.CASCADE)
    ...

未来

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-19 10:43:39

备选方案a)

Hmm所以DB关系我看不出有什么区别,那么如果您只是调整模型定义中的字段并修改最初创建该字段的旧迁移怎么办?这样,Django应该认为没有什么新的东西可以应用到原始的OneToOne字段中,并将其作为一个ForeignKey字段来处理。

请先在备份上尝试,看看是否有额外的唯一约束,或者在真正的ForeignKey字段之前,您可能必须在自定义的sql命令中删除。

备选方案b)

使用多个迁移和部署。

首先添加一个新字段(例如,nullable)

  • Adjust -您的逻辑-因此两个字段总是填充新数据,并更改

  • -将其部署在新的发布版

  • 中-将“旧”数据从abc复制到

  • -这里有两行,包含完全相同的数据-

  • -创建一个新版本,将旧的abc列和重命名abc_new重命名为abc,并删除abc_new字段H 218F 219的逻辑。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66275748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档