我正在尝试将on_delete
用于我的模型,但我的IDE要求我:collector,fields,sub_objs,using(即..., on_delete=models.PROTECT(collector, fields, sub_objs, using))
。
有人可以告诉我这些是什么,并给我一个简单的例子,因为我可以在任何地方找到它们:(
答案 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>)