Получение данных из моделей с обратными отношениями в django rest

У меня есть 3 модели, где модель A имеет внешний ключ другой модели в обратном порядке, как:-

class Book(models.Model):
name = models.CharField(max_length=100)
img=models.CharField(blank=True)
category=models.CharField(max_length=100,null=True)

class Section(models.Model):
book= models.ForeignKey(Book, related_name='books', on_delete=models.PROTECT)
title= models.TextField(null=True)

class SubSection(models.Model):
section=models.ForeignKey(Section, related_name='sections', 
                           on_delete=models.PROTECT, null=True) 
sub_title= models.TextField(null=True) 

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

data=[ "секция": "A", "title": "вступление", "subsection": [ { "id": 1, "sub_title": "title" } ] ]

До этого я использовал вложенный сериализатор, но вложенный сериализатор замедлял отклик.

Сам вложенный сериализатор не замедляет ответ, это просто потому, что он приведет к N+1 проблеме: вам нужно загрузить связанные данные в bulk.

Вы можете использовать .prefetch_related(…) [Django-doc] для этого, так:

Section.objects.prefetch_related('sections')

Это загрузит SubSection выбранные Section(ые) в bulk.

Однако не имеет особого смысла использовать 'sections' для параметра related_name=… [Django-doc], поскольку это имя отношения в обратном порядке. Поэтому вы можете переименовать его в:

class SubSection(models.Model):
    section = models.ForeignKey(
        Section,
        related_name='subsections',
        on_delete=models.PROTECT
    )
    sub_title= models.TextField()

и, таким образом, префетч с:

Section.objects.prefetch_related('subsections')
Вернуться на верх