python - 由于 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()
但仍然有同样的例外。我的操作可能出了什么问题?
解决方案
删除on_delete=models.PROTECT
你的user
领域。并运行manage.py makemigrations
ForeignKey
字段具有参数的默认CASCADE
值on_delete
。这意味着删除用户对象将级联并删除链接到该用户的 userinfo 对象。
看起来这是您正在寻找的行为。
您可以在文档文档中阅读有关此内容的更多信息
另请注意,尽管Django 2.0 需要此参数on_delete
的默认值。CASCADE
推荐阅读
- android-studio - 任务“:app:countPlayUatDexMethods”执行失败
- sql-server-2008 - 如何获取同一张表中多列下的字段总数?
- android - 未能解决支持向量绘图
- solr - Solr 云索引大小
- hyperledger-fabric - Hyperledger Fabric 私有数据收集
- tpm - 用裤子将 SRK 存储在 TPM 上
- r - 从 R 上传 winbugs 中的数据集
- python - Python3 中的 *args 是否保证保持顺序?
- html - 在 HTML 中创建按钮以进行更新
- openshift - OpenShift 上的 RHEL Atomic Image:安装安全更新