单个查询中的Django过滤器子元素

时间:2019-01-17 01:37:43

标签: django django-rest-framework

我有一个django DRF项目,用于跟踪学校班级中的学生。有teacherstudentadministrationschool_class个。并非所有学生都经过验证,但是管理部门应该看到所有学生,而老师应该只看到经过验证的学生。

创建查询集非常简单,因此当教师查询学生时,他们只会返回经过验证的学生。但是问题出在老师查询班级并访问school_class.students时。在这里,它将列出所有学生,无论他们是否经过验证。如何在获取班级的同一查询中过滤学生列表?

1 个答案:

答案 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