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

Django中文件上传完成后将作业待提交状态改为已提交的问题咨询

实现步骤如下:

1. 调整模型关联关系

你当前的Submissions提交记录模型没有和对应的Assignment作业绑定,后端无法识别提交的是哪份作业,先修改models.py:

class Assignment(models.Model):
    assignment_creator = models.ForeignKey(Teacher, on_delete=models.CASCADE)
    assignment_title = models.CharField(max_length=30)
    assignment_details = models.TextField()
    assignment_date = models.DateField(auto_now_add=True)
    # 约定 False=待提交Pending,True=已提交Submitted
    assignment_status = models.BooleanField(default=False)

class Submissions(models.Model):
    submitted_by = models.ForeignKey(Student, on_delete=models.CASCADE)
    submission_file = models.FileField(null=False)
    submitted_to = models.ForeignKey(Teacher, on_delete=models.CASCADE, null=True)
    # 新增关联作业的外键
    assignment = models.ForeignKey(Assignment, on_delete=models.CASCADE)

修改后执行python manage.py makemigrations和python manage.py migrate同步数据库结构。

2. 修改前端模板补全参数

首先修正模板里csrf的拼写错误,同时新增隐藏字段传递当前作业ID,再把写死的状态改成动态渲染:

<tr>
    <td>{{assignment.assignment_date}}</td>
    <td>{{assignment.assignment_creator}}</td>
    <td>{{assignment.assignment_title}} </td>
    <td>
        <form enctype="multipart/form-data" action="{% url 'assignment' %}" method="POST">
            <!-- 修正csrf拼写错误 -->
            {% csrf_token %}
            <!-- 新增隐藏字段传递作业ID -->
            <input type="hidden" name="assignment_id" value="{{assignment.id}}">
            <input required type="file" name="inputFile" placeholder="upload">
            <button>Upload</button>
        </form>
    </td>
    <td> 
        {% if assignment.assignment_status %}
        <span class="bg-success text-white">Submitted</span>
        {% else %}
        <span class="bg-warning text-white">Pending</span>
        {% endif %}
    </td>
</tr>

3. 调整视图层逻辑,提交后自动改状态

修改views.py的提交逻辑,保存提交记录后同步修改对应作业的状态:

if request.method == "POST":
    uploaded_file = request.FILES['inputFile']
    # 获取前端传递的作业ID
    assignment_id = request.POST.get('assignment_id')
    # 获取当前登录的学生实例
    student = Student.objects.get(student_username=request.user)
    # 获取对应作业实例
    target_assignment = Assignment.objects.get(id=assignment_id)
    # 保存提交记录,关联学生、作业、批改老师
    Submissions.objects.create(
        submitted_by=student,
        submission_file=uploaded_file,
        submitted_to=target_assignment.assignment_creator,
        assignment=target_assignment
    )
    # 修改作业状态为已提交
    target_assignment.assignment_status = True
    target_assignment.save()

补充说明:如果你的作业状态是每个学生单独维度(也就是同一份作业A学生提交了仅改A的状态,B学生没提交还是待提交),那你需要把assignment_status字段从Assignment模型移到Submissions模型,或者单独建学生-作业关联表存储状态,查询渲染的时候判断当前学生对应作业有没有提交记录即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:06:05