我有一个django DRF项目,用于跟踪学校班级中的学生。有teacher
,student
,administration
和school_class
个。并非所有学生都经过验证,但是管理部门应该看到所有学生,而老师应该只看到经过验证的学生。
创建查询集非常简单,因此当教师查询学生时,他们只会返回经过验证的学生。但是问题出在老师查询班级并访问school_class.students
时。在这里,它将列出所有学生,无论他们是否经过验证。如何在获取班级的同一查询中过滤学生列表?
答案 0 :(得分:0)
这可以在序列化器中的方法字段中完成。
students = SerializerMethodField(read_only=True)
def get_students(self, obj):
"""
Administration sees everyone, teachers see only verified.
"""
if self.context['request'].user.type == 'teacher':
qs = obj.students.filter(verified=True)
elif self.context['request'].user.type == 'administration':
qs = obj.students
return qs