#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