Django中如何在用户上传作业提交时修改关联Assignment的状态字段
实现方法
你可以通过下面的流程定位关联的Assignment记录,同时完成状态修改:
- 定位目标Assignment记录
优先通过作业主键ID查询(避免标题重名导致匹配错误),示例代码如下:
# 假设前端提交表单时附带了对应作业的主键参数 assignment_id target_assignment = Assignment.objects.get(id=assignment_id)
如果只能通过作业标题查询,建议同时加上作业创建人条件缩小范围,降低重名冲突概率:
# assignment_title 为前端传入的作业标题,target_teacher为当前作业对应的教师对象 target_assignment = Assignment.objects.get(assignment_title=assignment_title, assignment_creator=target_teacher)
- 更新提交状态
你可以在新建提交记录时直接设置状态,也可以修改已有提交记录的状态:
# 场景1:新建提交记录时直接标记为已提交 Submissions.objects.create( submitted_by=当前登录的学生实例, submission_file=前端上传的文件对象, submitted_to=target_assignment.assignment_creator, submission_title=target_assignment, submission_status=True ) # 场景2:修改已有待提交记录的状态 submission = Submissions.objects.get(submitted_by=当前登录的学生实例, submission_title=target_assignment) submission.submission_status = True submission.save()
优化建议
- 模型命名建议调整为单数
Submission,符合Django模型的通用命名约定 - 查询操作建议使用Django封装的
get_object_or_404方法替代原生get,可以优雅处理查询无结果的异常 - 如果需要限制同一个学生不能重复提交同一个作业,可以在
Submissions模型中增加联合唯一约束:
class Submissions(models.Model): # 原有字段保持不变 class Meta: constraints = [ models.UniqueConstraint(fields=['submitted_by', 'submission_title'], name='unique_submit_per_assignment') ]
内容的提问来源于stack exchange,提问作者F Nasir
相关产品推荐
相关产品推荐

