我有一个模特:
class MyModel(models.Model):
...
def save(self):
print "saving"
...
def delete(self):
print "deleting"
...
Run Code Online (Sandbox Code Playgroud)
save() - 方法被触发,但delete()不是.我使用最新的svn-Version(Django 1.2版pre-alpha SVN-11593),关于http://www.djangoproject.com/documentation/models/save_delete_hooks/上的文档,这应该可行.有任何想法吗?
使用以下相关模型(一个博客条目可以有多个修订版):
class BlogEntryRevision(models.Model):
revisionNumber = models.IntegerField()
title = models.CharField(max_length = 120)
text = models.TextField()
[...]
class BlogEntry(models.Model):
revisions = models.ManyToManyField(BlogEntryRevision)
[...]
Run Code Online (Sandbox Code Playgroud)
如何在删除BlogEntryRevision相应的内容时告诉Django删除所有相关的s BlogEntry?如果删除了"其他"端的对象,则默认似乎是将对象保持为多对多关系.有什么方法可以做到这一点 - 最好不要超越BlogEntry.delete?
我阅读了有关PROTECT和RESTRICT 的django 文档,以与"on_delete"一起使用。
通过引发 ProtectedError(django.db.IntegrityError 的子类)来防止删除引用的对象。
例子:
class MyModel(models.Model):
field = models.ForeignKey(YourModel, on_delete=models.PROTECT)
Run Code Online (Sandbox Code Playgroud)
通过引发 RestrictedError (django.db.IntegrityError 的子类)来防止删除引用的对象。与 PROTECT 不同,如果引用的对象还引用了在同一操作中正在删除的不同对象,但通过 CASCADE 关系,则允许删除引用的对象。
例子:
class MyModel(models.Model):
field = models.ForeignKey(YourModel, on_delete=models.RESTRICT)
Run Code Online (Sandbox Code Playgroud)
在某种程度上,我可以理解PROTECT和RESTRICT之间的区别,但不完全理解PROTECT和RESTRICT之间的区别到底是什么?我什么时候应该使用它们?