Фильтр вложенных сериализаторов в Django Rest Framework
У меня есть несколько вложенных сериализаторов для модуля экзамена в учебном заведении. Я начал с term -> class -> student ->classes -> subjects -> exam_categories ->exam_subcategories -> marks.
Я хочу отфильтровать оценки в подкатегориях экзамена, чтобы они были оценками отдельного студента. В настоящее время каждому студенту возвращается весь список оценок. Я просмотрел несколько решений в Интернете, но это не дало мне способа решения проблемы. Вот пример модели, сериализаторов и вывода. Я хочу иметь возможность фильтровать 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']
Марки модели
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__'
Любой вклад будет высоко оценен