我正在使用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()
我有什么问题吗?
答案 0 :(得分:1)
线程注释是DELETE CASCADE的教科书示例。您有一个层次结构,因此如果删除了注释的父级,则还需要删除所有子级。否则,他们就会成为孤儿并且你的等级制度被打破了。特别是对于评论,您不能仅仅将子评论分配给新的父级,因为它们通常是上下文的,并且不会从发布回复的评论中脱离上下文。
如果您查看互联网上网站上的评论部分。当评论被线程化时和评论者被允许删除他们的评论(事实上大多数网站不让你删除你的评论),他们从来没有实际上删除评论。而是将内容简单地更改为“此评论已被删除”。这样,内容在技术上已经消失,满足用户或主持人,但是它仍然为了层次结构而挂起。