django on_delete不工作

时间:2012-07-03 09:24:11

标签: django django-models

我正在使用django-threadedcomments app,因为在下面给出的模型中,parent是线程注释的外键,当我删除注释时它也会被删除。但是,我不希望这种情况发生。所以我添加了on_delete = models.SET_NULL,但这似乎没有用。删除评论时,父评论仍会被删除。

这是线程注释模型的一部分,其余都是方法,所以我跳过了它们

class ThreadedComment(Comment):
    title = models.TextField(_('Title'), blank=True)
    parent = models.ForeignKey('self', null=True, blank=True, default=None,
        related_name='children', verbose_name=_('Parent'), on_delete=models.SET_NULL)
    last_child = models.ForeignKey('self', null=True, blank=True,
        verbose_name=_('Last child'))
    tree_path = models.TextField(_('Tree path'), editable=False,
        db_index=True)

    objects = CommentManager()

我有什么问题吗?

1 个答案:

答案 0 :(得分:1)

线程注释是DELETE CASCADE的教科书示例。您有一个层次结构,因此如果删除了注释的父级,则还需要删除所有子级。否则,他们就会成为孤儿并且你的等级制度被打破了。特别是对于评论,您不能仅仅将子评论分配给新的父级,因为它们通常是上下文的,并且不会从发布回复的评论中脱离上下文。

如果您查看互联网上网站上的评论部分。当评论被线程化时评论者被允许删除他们的评论(事实上大多数网站让你删除你的评论),他们从来没有实际上删除评论。而是将内容简单地更改为“此评论已被删除”。这样,内容在技术上已经消失,满足用户或主持人,但是它仍然为了层次结构而挂起。