首页 > 解决方案 > 在 Django Rest Framework 中过滤嵌套的序列化程序

问题描述

我有几个用于机构考试模块的嵌套序列化程序。我从学期 -> 班级 -> 学生 -> 班级 -> 科目 -> 考试类别 -> 考试子类别 -> 分数开始。我想过滤exam_subcategories 中的分数,以便成为单个学生的分数。目前每个学生都返回所有的分数列表。我已经在网上经历了几种解决方案,但它并没有为我提供解决它的方法。这是示例模型和序列化程序和输出。我希望能够过滤 mark_exam_type 以仅返回该学生在该考试子类别中该课程的该科目中该学期的分数(marks_exam_type 中只有一个对象在此处输入图像描述

在此处输入图像描述

模型用户是

class Classes(models.Model):
    year = models.ForeignKey(AcademicYear,on_delete=models.CASCADE)
    current_term = models.ForeignKey(YearTerm,related_name='current_term',on_delete=models.CASCADE,null=True)
    terms = models.ManyToManyField(YearTerm,related_name="class_terms",through='YearTermClasses')
    course = models.ForeignKey(Course,on_delete=models.CASCADE)
    course_year = models.ForeignKey(CourseYear,on_delete=models.CASCADE,null=True)
    class_name = models.CharField(max_length=255)
    class_code = models.CharField(max_length=255)
    created_date = models.DateTimeField(auto_now_add=True)
    updated_date = models.DateTimeField(auto_now=True)
    school = models.ForeignKey(School,on_delete=models.CASCADE)
    active = models.BooleanField(default=False)
    def __str__(self):
       return self.class_name
    class Meta:
       ordering = ['-year__start_date']
       unique_together=['year','current_term','course','course_year','class_name']

标记模型

class Marks(models.Model):
    course = models.ForeignKey(Course, on_delete=models.CASCADE)
    subject = models.ForeignKey(CourseSubject,related_name='subject_marks', on_delete=models.CASCADE)
term = models.ForeignKey(YearTerm,related_name="terms_marks",on_delete=models.CASCADE)
    student = models.ForeignKey(Student,related_name='marks',on_delete=models.CASCADE)
    exam = models.ForeignKey(ExamSubCategory,related_name='marks_exam_type',on_delete=models.CASCADE)
    exam_category = models.ForeignKey(ExamCategory,on_delete=models.CASCADE,related_name="marks_exam_category",null=True)
    classes = models.ForeignKey(Classes,on_delete=models.CASCADE)
    marks = models.IntegerField()
    created_by = models.ForeignKey(Profile, on_delete=models.CASCADE)
    created_date = models.DateTimeField(auto_now_add=True)
    updated_date = models.DateTimeField(auto_now_add=True)
    # def current_student(self):
    #     return 
    def __str__(self):
       return self.student.registration_no
    class Meta:
       ordering = ['-created_date']

我希望能够使用 studentId,subject,term,examSubcategory 过滤此 MarksMarksSerializer,以便仅返回该考试子类别中该科目的该学生的分数,目前它返回该子类别中的所有分数

 class MarksExamsSubcategoriesSerializers(serializers.ModelSerializer):
        marks_exam_type = MarksMarksSerializer(many=True)
        class Meta:
            model = ExamSubCategory
            fields = ['id','code','title','marks_exam_type']

MarksMarks 序列化程序

class MarksMarksSerializer(serializers.ModelSerializer):
    class Meta:
        # list_serializer_class = FilterMarksSerializer
        model = Marks
        fields = '__all__'

任何贡献都将受到高度赞赏

标签: pythondjangodjango-modelsdjango-rest-frameworkdjango-rest-viewsets

解决方案


推荐阅读