django模型-on_delete=models.PROTECT()

django模型-on_delete=models.PROTECT(),django,django-models,Django,Django Models,我试图在我的模型上使用on_delete,但我的IDE要求我:收集器、字段、子对象、使用(即…,on_delete=models.PROTECT(收集器、字段、子对象、使用)) 有人能告诉我这些是什么,并给我一个简单的例子,因为我可以在任何地方找到它们的文档:(忽略您的IDE。它试图让您调用模型。PROTECT函数,它确实接受这些参数。但是您实际上想要传递函数本身: my_field = models.ForeignKey(..., on_delete=models.PROTECT) ie没有

我试图在我的模型上使用
on_delete
,但我的IDE要求我:收集器、字段、子对象、使用(即
…,on_delete=models.PROTECT(收集器、字段、子对象、使用))


有人能告诉我这些是什么,并给我一个简单的例子,因为我可以在任何地方找到它们的文档:(

忽略您的IDE。它试图让您调用
模型。PROTECT
函数,它确实接受这些参数。但是您实际上想要传递函数本身:

my_field = models.ForeignKey(..., on_delete=models.PROTECT)
ie没有调用函数的括号


(此处插入关于使用带有动态语言的IDE的内容…

models.PROTECT可防止删除,但默认情况下不会引发错误

您可以为其创建已受保护的自定义异常

from django.db import IntegrityError

class ModelIsProtectedError(IntegrityError):
    pass

def prevent_deletions(sender, instance, *args, **kwargs):
    raise ModelIsProtectedError("This model can not be deleted")


#in your models.py:
pre_delete.connect(prevent_deletions, sender=<your model>)
从django.db导入IntegrityError
类模型保护错误(IntegrityError):
通过
def防止删除(发送方、实例、*args、**kwargs):
raise模型受保护错误(“无法删除此模型”)
#在您的models.py中:
pre_delete.connect(阻止_删除,发件人=)
导入类似:(Python 2.7)

然后你可以直接使用它

category = ForeignKey(TCategory, PROTECT, null=False, blank=False)

有没有机会告诉我如何在views.py中捕获
ProtectedError
(我应该使用
try:
?)我应该捕获什么?(很抱歉我不知道,python不是我的强项)您应该捕获django.db.models.ProtectedError状态:
通过引发django.db.IntegrityError的子类ProtectedError来防止删除引用的对象
category = ForeignKey(TCategory, PROTECT, null=False, blank=False)