django - Django:将字段从 Int / Char 更改为 ForgeinKey
问题描述
如果我有以下型号:
Order:
customer_id = models.CharField(max_length=256, null=True)
我可以创建一个空迁移,使用代码在表上创建一个 fk 并将代码更改为:
Order:
customer = models.ForeignKey('Customer', on_delete=models.CASCADE, null=True, related_name='orders')
还是我真的需要复杂的迁移来保存数据等?
解决方案
将字段从 int/char 更改为外键的方法: 顺序:
customer_id = models.CharField(max_length=256, null=True)
添加另一个备份字段并将 customer_id 复制到 customer_backup_id
customer_backup_id = models.CharField(max_length=256, null=True)
创建空迁移将所有 customer_id 复制到 customer_backup_id
在模型中添加客户字段
customer = models.ForeignKey('Customer', on_delete=models.CASCADE, null=True, blank=True, related_name='orders')
创建另一个空迁移
使用 id customer_backup_id 从 db 获取客户,并保存到订单中。
推荐阅读
- sql - 为什么带有 LIMIT 的横向连接会增加执行时间?
- c# - 什么是 ApiController 属性适合精确(尤其是在开发之外)?
- javascript - Facebook 的 JS SDK 停止在控制台中处理此错误
- sql - 为什么 PostgreSQL 不使用无符号整数作为 ID?那不会提供两倍的可能记录吗?
- ruby-on-rails - 如何在 ActiveAdmin 的仪表板中使用参数?
- neo4j - 设置关系属性时奇怪的 Neo4J Cypher 行为
- visual-studio-code - 上下移动时停止线移动(Visual Studio Code)
- delphi - 快速更新数组更少的行
- sml - 如何在两个整数范围内进行嵌套 for 循环?
- npm - vscode中的npm版本与安装版本不同