Django:将字段从Int / Char更改为ForgeinKey

时间:2019-04-03 06:48:32

标签: django django-models django-rest-framework

如果我有以下型号:

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')

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

2 个答案:

答案 0 :(得分:0)

您不需要编写自定义迁移。只需更改已定义的字段定义即可。然后照常迁移。 确保当前customer_id包含那些值在Customer模型中以pk值存在。

答案 1 :(得分:0)

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