Как загрузить данные из многоуровневого объекта вложенности

```
when i do the School.objects.filter() query , how to load student object in single 
    query using School.objects.filter()
```
    class School(models.Model):
        name = models.CharField(max_length=50)
        grade = models.ForeignKey(Grade)
    
    class Grade(models.Model):
        name = models.CharField(max_length=10)
        
    class Student(models.Model):
        name = models.CharField(max_length=50)
        grade = models.ForeignKey(Grade)

когда я пытаюсь загрузить объект ученика, используя school.objects.filter(), он загружает только объект школы, когда я использую select_related('grade'), он загружает объект класса в одном sql запросе, как я могу использовать select_related('student'), с school.objects.filter()

>

Переход от класса к студенту - это отношение reverse-ForeignKey, которое является отношением многие-к-одному, а не один-к-одному. Вы не можете сделать это с помощью select_related.

Я не совсем уверен, но думаю, что вы можете использовать prefetch_related:

School.objects.filter(...).prefetch_related( 'grade__students')

вы можете сделать примерно следующее:

schools = School.objects.filter(...).prefetch_related('grade__student_set')
for school in schools:
    students_for_school = school.grade.student_set.all()
    print(students_for_school)

Однако следует отметить, что prefetch_related() здесь будет сделан дополнительный запрос, так что потребуется два запроса

https://docs.djangoproject.com/en/4.0/ref/models/querysets/#prefetch-related

Вернуться на верх