python - 在 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__'
任何贡献都将受到高度赞赏
解决方案
推荐阅读
- asp.net-core - 如何在多个部署环境之间管理微服务架构中的配置文件?
- pine-script - 在交易视图中回测以 Pine Script 编写的策略时,“无数据”错误的原因是什么?
- haskell - 处理可能在 do 块中并提取一个值
- reporting-services - 在同一文本框中添加两个超链接
- mysql - 只需更改配置即可在 JPA 和 MongoDB 之间切换
- asp.net - 监控 asp.net 中使用了哪些表单
- excel - VBA 不刷新计算单元格和链接
- python - 我应该使用哪种协议进行 Raspberry Pi 通信?
- javascript - 在 React 组件中设置新状态后调用的方法
- python - 如何找到 x1、x2 和 y 之间的潜在模式?