You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何筛选当前登录学生关联的Enrollment外键数据

实现方法

针对你的模型关系,有两种可靠的方式查询当前登录学生对应的Enrollment数据:

方式一:直接跨关联表查询(推荐,性能更好)

Django ORM支持通过双下划线__实现跨关系字段过滤,不需要提前查询StudentData实例,单次数据库查询即可拿到结果:

log_user = request.user
# 匹配Enrollment关联的StudentData记录中,user字段等于当前登录用户的所有数据
student_enrollments = Enrollment.objects.filter(student__user=log_user)

查询得到的student_enrollments是可迭代的QuerySet,直接传入模板即可渲染对应选课记录。

方式二:通过学生实例反向查询

如果页面同时需要展示学生的姓名、院系、专业等基础信息,可以先获取当前用户绑定的StudentData实例,再通过外键反向关联拿到Enrollment数据:

log_user = request.user
# StudentData和CustomUser是一对一关系,用get()获取唯一匹配的实例,不要直接用filter()返回的QuerySet
current_student = StudentData.objects.get(user=log_user)
# Django会为外键字段自动生成反向查询属性,默认命名规则为「关联模型名小写_set」
student_enrollments = current_student.enrollment_set.all()
# 学生基础信息可以直接复用current_student,不需要额外查询
student_information = current_student

异常兼容

为了避免当前登录用户没有绑定StudentData档案时抛出DoesNotExist异常,可以增加空值判断:

log_user = request.user
current_student = StudentData.objects.filter(user=log_user).first()
if not current_student:
    # 无匹配学生档案时返回空查询集,模板渲染不会触发报错
    student_enrollments = Enrollment.objects.none()
    student_information = None
else:
    student_enrollments = current_student.enrollment_set.all()
    student_information = current_student

内容的提问来源于stack exchange,提问作者Amiable.Azam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 00:51:24