django model - on_delete = models.PROTECT()

时间:2011-05-18 17:23:34

标签: django django-models

我正在尝试将on_delete用于我的模型,但我的IDE要求我:collector,fields,sub_objs,using(即..., on_delete=models.PROTECT(collector, fields, sub_objs, using))

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

3 个答案:

答案 0 :(得分:21)

忽略您的IDE。它试图让你调用models.PROTECT函数,它确实采用了这些参数。但你实际上想要传递函数本身:

my_field = models.ForeignKey(..., on_delete=models.PROTECT)

即没有可以调用函数的括号。

(在这里插入关于使用带动态语言的IDE的咆哮......)

答案 1 :(得分:1)

导入如:(Python 2.7)

from django.db.models.deletion import PROTECT

然后你可以直接使用它。

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

答案 2 :(得分:-1)

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>)