26

contenttypes GenericForeignKey を使用して、任意のモデルにコメントを添付できるカスタム コメント システムを作成しています。

class Comment(models.Model):
    body = models.TextField(verbose_name='Comment')
    user = models.ForeignKey(User)
    parent = models.ForeignKey('self', null=True, blank=True)
    created = models.DateTimeField(auto_now_add=True)
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')

コメントが添付されているモデルが削除されると、削除がカスケードされてコメントも削除されることを理解しています。

残念ながら、これは起こっておらず、私は困惑しています。デフォルトの削除動作が変更される一般的な理由はありますか?

4

3 に答える 3

32

いいえ、ドキュメントにはそうは書かれていません。つまり、モデルにを定義するとGenericRelation(つまり、の裏側) GenericForeignKey、ジェネリック FK を持つアイテムが削除されると、GenericRelation を持つアイテムも削除されるということです。

ForeignKey とは異なり、GenericForeignKey は、この動作をカスタマイズするための on_delete 引数を受け入れません。必要に応じて、GenericRelation を使用しないだけでカスケード削除を回避でき、pre_delete シグナルを介して別の動作を提供できます。

于 2011-07-23T20:49:41.440 に答える