Я понимаю, что это очень старый вопрос, поэтому возможно, что вещи отличаются от того, когда его спрашивали, но принятый ответ заставил меня преследовать кроличью нору сегодня утром, поэтому я хотел оставить это здесь чтобы будущие поколения не разделяли мою боль.
Из документов:
Также обратите внимание, что если вы удалите объект, имеющий GenericRelation, все объекты, на которые указывает GenericForeignKey, также будут удалены . В приведенном выше примере это означает, что если объект Bookmark был удален, любые объекты TaggedItem, указывающие на него, будут удалены одновременно.
Это противоположно тому, что говорит принятый ответ. Представьте себе следующее:
class Comment(models.Model):
body = models.TextField(verbose_name='Comment')
user = models.ForeignKey(User, on_delete=models.CASCADE)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
class Post(models.Model):
comment = GenericRelation(Comment)
В приведенном выше примере, если ваш объект Comment имеет общий внешний ключ, указывающий на объект Post, то при удалении объекта Post все объекты Comment, указывающие на него, также будут удалены.
Это ожидаемое поведение и работает так же, как обычный ForeignKey. Используя тот же пример, приведенный выше, если объект User, на который указывает объект Comment, удален, комментарий также будет удален.
Если вы случайно натолкнулись на этот вопрос, потому что вам нужно обратное поведение, т. Е. Когда вы удаляете комментарий, пост также удаляется, тогда вам, вероятно, придется использовать силу сигналов .