簡體   English   中英

由於 FK,無法刪除 model 的某些實例

[英]Cannot delete some instances of model because of 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 的信息。 但是當我嘗試刪除用戶 model 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

您可以在以下文檔中查看它:

https://docs.djangoproject.com/en/2.2/ref/models/fields/#django.db.models.ForeignKey.on_delete

你在這里指出:

PROTECT [來源] 通過引發 django.db.IntegrityError 的子類 ProtectedError 來防止刪除引用的 object。

刪除user字段上的on_delete=models.PROTECT 並運行manage.py makemigrations

對於on_delete參數, ForeignKey字段的默認值為CASCADE 這意味着刪除用戶 object 將級聯並刪除鏈接到該用戶的用戶信息 object。

看起來這是您正在尋找的行為。

您可以在文檔文檔中閱讀有關此內容的更多信息

另請注意,盡管on_delete具有CASCADE的默認值,但 Django 2.0 將需要此參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM