Как я могу получить связанные объекты для связанных объектов объекта в 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]))