首页 > 解决方案 > 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')

还是我真的需要复杂的迁移来保存数据等?

标签: djangodjango-modelsdjango-rest-framework

解决方案


将字段从 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 获取客户,并保存到订单中。


推荐阅读