Как получить объект связанный через GenericForeignKey

Предположим у меня есть такие модели:

class FirstType(models.Model):
    pass

class SecondType(models.Model):
    pass

class Comment(models.Model):
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')
  

Затем создаю экземпляр класса Comment, ссылающийся на FirstType.

Как мне через объект FirstType получить все Comment связанный с ним через GenericForeignKey?

*Comment не должен быть связан напрямую с FirstType и SecondType


Ответы (2 шт):

Автор решения: Mikhail Sharaborin

Зависит от того какая стоит перед вами задача.

  1. Если вам нужен queryset, то используйте select_related() https://django.fun/tutorials/select_related-i-prefetch_related-v-django/

    queryset = FirstType.objects.select_related('content_type').all()

  2. Если в шаблоне HTML {% for _ in firsttype.comment_set.all %}

→ Ссылка
Автор решения: Никита Крылов

На утро нашел ответ на свой вопрос в документации. Нужно использовать поле GenericRelation в моделях на которые ссылается GenericForeignKey

class FirstType(models.Model):
    comments = GenericRelation('Comment')

class SecondType(models.Model):
    comments = GenericRelation('Comment')

Далее пользоваться полем comments как обычным queryset

→ Ссылка