首页 > 解决方案 > 由于 FK,无法删除模型的某些实例

问题描述

Python 3.6 和 Django 1.11.7。

我有两个模型如下所示:

class User():
    name = models.CharField()
    ...

class UserInfo():
   user = models.OneToOneField(User, on_delete=models.PROTECT, primary_key=True, related_name='info')

我想删除一些用户实例 A,我明确删除了用户 A 的信息。但是当我尝试删除用户模型user.delete()时,我得到了 ProtecedError

ProtectedError: ("Cannot delete some instances of model 'User' because they are referenced through a protected foreign key: 'UserInfo.user'", <QuerySet [<UserInfo: UserInfo object>]>)

然后我尝试将删除放在 try/catch 中,如下所示:

try:
    user.delete()
except ProtectedError:
    UserInfo.objects.filter(user=user).delete()
    user.delete()

但仍然有同样的例外。我的操作可能出了什么问题?

标签: pythondjango

解决方案


删除on_delete=models.PROTECT你的user领域。并运行manage.py makemigrations

ForeignKey字段具有参数的默认CASCADEon_delete。这意味着删除用户对象将级联并删除链接到该用户的 userinfo 对象。

看起来这是您正在寻找的行为。

您可以在文档文档中阅读有关此内容的更多信息

另请注意,尽管Django 2.0 需要此参数on_delete的默认值。CASCADE


推荐阅读