我有一个类似下面的Django模型。
class ExampleModel(models.Model):
name = models.CharField(...)
related_user = models.ForeignKey(UserTypeA, related_name='related_example', blank=True, null=True, on_delete=models.SET_NULL)
最近我不得不通过将related_user
从ForeignKey
更改为UserTypeA
来更改UserTypeB
字段。
当然,当我尝试python manage.py makemigration
...
django.db.utils.IntegrityError: insert or update on table "models_examplemodel" violates foreign key constraint "models_examplemodel_related_user_id_ac0c6018_fk_accounts_"
DETAIL: Key (related_user_id)=(13) is not present in table "accounts_usertypea".
进行这些更改的最安全方法是什么?目前,我正在开发中,因此很高兴删除我的数据/迁移/所有内容,但是我认为在生产中这将很困难。
我想在这里看到的理想行为是ExampleModel
和UserTypeA
之间的关系刚刚被删除,因此当前关系将设置为NULL
。有想法吗?
答案 0 :(得分:1)
如果您只想删除UserTypeA
并将UserTypeB
与None
值一起使用,只需执行以下操作:
related_user
字段related_user
字段如果您想做些更复杂的事情(根据UserTypeB
填充UserTypeA
,请按照以下步骤操作
realted_user_b
字段,默认为空realted_user_b
的数据迁移文件realted_user
字段realted_user_b
重命名为realted_user