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

#python #django #django-models #django-rest-framework #django-rest-viewsets

Вопрос:

У меня есть несколько вложенных сериализаторов для модуля экзамена в учреждении. Я начал с термина -> класс ->> студент ->>>классы ->>>> предметы — > > > > > > категории экзамена — >>>>>> > категории экзамена ->>>>>>> отметки. Я хочу отфильтровать оценки в категориях exam_subc, чтобы они были оценками отдельного студента. В настоящее время каждый студент возвращает список всех оценок. Я просматривал несколько решений в Интернете, но это не дало мне способа их решения. Вот примеры моделей, сериализаторов и выходных данных. Я хочу иметь возможность фильтровать тип marks_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']
 

Marks model

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

I want to be able to filter this MarksMarksSerializer using studentId,subject,term,examSubcategory in order to return only marks for that student in that subject in that exam sub category, currently its return all the marks in that subCategory

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

MarksMarks serializer

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

Any contribution will be highly appreciated