Python Django Rest框架-嵌套序列化而非嵌套

Python Django Rest框架-嵌套序列化而非嵌套,python,django,serialization,django-rest-framework,Python,Django,Serialization,Django Rest Framework,我想要一个多级嵌套序列化程序。基本上每个学校都有一份学生名单,每个学生都有一份成绩表。它正在输出这个 {"id":1,"name":"Sierra Grande Elem/Junior High"} 看起来它不包括我创建的任何鸟巢 这是我的模特 class School(models.Model): name = models.TextField(max_length = 150, blank=True) class Student(models.Model): curren

我想要一个多级嵌套序列化程序。基本上每个学校都有一份学生名单,每个学生都有一份成绩表。它正在输出这个

{"id":1,"name":"Sierra Grande Elem/Junior High"}
看起来它不包括我创建的任何鸟巢

这是我的模特

class School(models.Model):
    name = models.TextField(max_length = 150, blank=True)

class Student(models.Model):
    current_school = models.ForeignKey(
        "School",
        null = True,
        on_delete = models.PROTECT,
    )
    first_name = models.CharField(max_length = 35, blank=True)
    last_name = models.CharField(max_length = 35, blank=True)


class Grade(models.Model):
    student = models.ForeignKey(
        "Student",
        null = True,
        on_delete = models.PROTECT,
    )
    course = models.ForeignKey(
        "Course",
        null = True,
        on_delete = models.PROTECT,
    )
    grade = models.FloatField(null = True)
这是我的serializers.py

class NestedSchoolSerializer(serializers.ModelSerializer):
    class Meta:
        model = School
        fields = ("id","name")

class NestedStudentSerializer(serializers.ModelSerializer):
    school_set = NestedSchoolSerializer(many = True, read_only = True)
    class Meta:
        model = Student
        fields = ("school_set","id","first_name","last_name")


class NestedGradeSerializer(serializers.ModelSerializer):
    student_set = NestedStudentSerializer(many = True, read_only = True)
    class Meta: 
        model = Grade
        fields = ("student_set","id","course","grade")
这是我的views.py文件:

class SchoolInfo(generics.RetrieveAPIView):
    queryset = School.objects.all()
    serializer_class = NestedSchoolSerializer  
这是我的url.py文件:

urlpatterns = [
    path('school/grade/<int:pk>/', views.SchoolInfo.as_view()),
  ]

urlpatterns=[
路径('school/grade/',views.SchoolInfo.as_view()),
]

非常感谢您的帮助!刚到Django,已经解决这个问题有一段时间了。我需要更改代码的哪一部分?

欢迎使用堆栈溢出!看起来你在正确的轨道上,但是你的巢被颠倒了。您的
nestedschool序列化程序
不知道任何有关学生的信息,
NestedStudentSerializer
也不知道成绩。可能还有其他问题,但这是第一个跳出来对我。请尝试以下方法:

class NestedGradeSerializer(serializers.ModelSerializer):
    class Meta: 
        model = Grade
        fields = ("id","course","grade")

class NestedStudentSerializer(serializers.ModelSerializer):
    grade_set = NestedGradeSerializer(many = True, read_only = True)
    class Meta:
        model = Student
        fields = ("grade_set","id","first_name","last_name")


class NestedSchoolSerializer(serializers.ModelSerializer):
    student_set = NestedStudentSerializer(many = True, read_only = True)
    class Meta:
        model = School
        fields = ("id", "name", "student_set")
了解如何设置这些内容的一种方法是,在大多数情况下,序列化程序中的字段应该映射到同一模型中的字段(如果您使用的是
ModelSerializer