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

Django作业提交平台上传作业后学生端仍显示无作业排查

问题排查与修复方案

核心代码硬伤定位

  • 视图缩进错误:你贴出的class_assignment学生视图额外多了一层缩进,实际是嵌套在upload_assignment教师视图内部的局部函数。这种写法下Django的URL路由根本无法导入独立的学生视图,你实际访问时大概率匹配到了之前残留的旧版空逻辑视图,自然查不到作业。把这个视图函数的缩进调整到和upload_assignment同级的全局层级即可。
  • 变量名拼写不匹配:学生视图中你定义的已交作业列表变量是assignments_list(带字母s),但给模板传上下文时写的是assignment_list(不带s)。正常运行下未定义变量会直接抛出NameError,你全程没看到traceback,说明实际运行的视图代码和贴出的版本不一致,大概率是调试时临时改了逻辑忘了同步回正确版本。
  • 多对多关联失效排查:教师上传作业时,获取关联学生的查询语句为Student.objects.filter(user_student_name__teacher=request.user.Teacher)。你可以在upload.save()、upload.student.add(*students)两行代码前加一句print(len(students)),直接确认查询返回的学生数量:

    若打印结果为0,说明关联学生的查询逻辑没有命中你测试用的班级学生。常见原因是创建StudentsInClass关联时,绑定的老师/学生实例和当前登录账号对应的实例不匹配。
    只要查询出的学生列表为空,哪怕作业文件上传成功,多对多字段也不会写入任何关联记录,学生端反向查询student.student_assignment时结果为空,就会触发模板里的“无作业可看”分支。

模板逻辑校验

你模板中判断作业存在性的逻辑student.student_assignment.count == 0是正确的,只要多对多关联真实存在,这个计数就会大于0,不会进入空状态判断分支。

无Traceback时的快速定位方法

没有报错信息时直接用Django Shell验证逻辑是最快的:

  • 启动shell后拿到你测试用的学生实例,直接执行学生实例.student_assignment.all(),看返回的结果集中有没有刚上传的作业。
  • 如果shell查询结果为空,手动执行作业实例.student.add(学生实例),再刷新学生页面看作业是否正常显示。如果手动加关联后就能正常展示,那问题100%出在教师上传作业的学生查询环节——查询返回空导致关联没写入。

内容的提问来源于stack exchange,提问作者Vinayak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 03:15:04