Фильтр вложенных сериализаторов в Django Rest Framework

У меня есть несколько вложенных сериализаторов для модуля экзамена в учебном заведении. Я начал с term -> class -> student ->classes -> subjects -> exam_categories ->exam_subcategories -> marks. Я хочу отфильтровать оценки в подкатегориях экзамена, чтобы они были оценками отдельного студента. В настоящее время каждому студенту возвращается весь список оценок. Я просмотрел несколько решений в Интернете, но это не дало мне способа решения проблемы. Вот пример модели, сериализаторов и вывода. Я хочу иметь возможность фильтровать marks_exam_type, чтобы вернуть только оценки этого студента в этом семестре по этому предмету в этом классе в этой подкатегории экзамена ( Только один объект в marks_exam_type) enter image description here

enter image description here

Пользователями моделей являются

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']

Я хочу иметь возможность фильтровать этот MarksMarksSerializer, используя studentId, subject, term, examSubcategory, чтобы вернуть только оценки для этого студента по этому предмету в этой экзаменационной подкатегории, в настоящее время он возвращает все оценки в этой подкатегории

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

Сериализатор MarkMarks

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

Любой вклад будет высоко оценен

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