Как я могу получить связанные объекты для связанных объектов объекта в Django в одном запросе, если все они связаны с помощью Generic Foreign Key

Предположим, у меня есть следующие модели и я знаю, что каждое сообщение может иметь несколько записей, а каждая запись может иметь несколько заметок, как я могу получить набор связанных заметок из сообщения в одном запросе?

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


class Record:
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, null=True)
    object_id = models.PositiveIntegerField(null=True, blank=True)
    content_object = GenericForeignKey()

    notes = GenericRelation(Note, related_query_name='records')


class Message:
    records = GenericRelation(Record, related_query_name='messages')

Я знаю, как достичь этого с помощью понимания списка, как показано ниже, однако это плохой подход, поскольку в этом случае будет выполняться несколько запросов.

if records := message.records.all():
    notes = list(chain.from_iterable([record.notes.all() for record in records]))
Вернуться на верх