2

私はdjango-threadedcommentsアプリを使用していますが、以下のモデルでは、親はスレッド化されたコメントの外部キーであるため、コメントを削除すると削除されます。しかし、私はそれが起こらないようにしたいと思います。だから私は付け加え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()

私が間違っていることはありますか?

4

1 に答える 1

1

スレッド化されたコメントは、DELETE CASCADE の教科書的な例です。階層構造になっているため、コメントの親が削除された場合、すべての子も削除する必要があります。そうしないと、それらは孤立し、階層が壊れます。特にコメントの場合、子のコメントを新しい親に割り当てることはできません。これは、多くの場合、子のコメントが文脈に依存し、返信が投稿されたコメントの文脈から外れて意​​味をなさないためです。

インターネット上のウェブサイトのコメント セクションを見てみましょう。コメントがスレッド化されいて、コメント投稿者がコメントを削除できる場合 (実際、ほとんどの Web サイトではコメントを削除できません)、実際にコメントを削除することはありません。代わりに、コンテンツは単に「このコメントは削除されました」のようなものに変更されます。そうすれば、コンテンツは技術的にはなくなり、ユーザーまたはモデレーターのいずれかを満足させます、それでも階層のためにぶらぶらしています.

于 2012-07-03T15:00:24.430 に答える