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

Django中如何处理学生大学申请场景下的文档请求功能?

材料请求功能实现方案

1. 数据库存储方案

优先选择每份要求的材料单独存储一行的方案,不推荐用数组存单行。
核心原因:

  • 扩展灵活:后续要给单个材料加状态(待上传/已上传/已驳回/已审核)、上传时间、审核备注、文件存储地址、驳回原因这类字段,数组结构完全无法支持
  • 查询效率更高:如果要统计某类材料的提交率、筛选所有未上传的材料,单条存储直接按字段过滤即可,数组需要全表扫描后反序列化解析,性能差距极大
  • 数据一致性更有保障:不会出现数组元素和实际上传的文件记录对应不上的问题

可参考的表结构:
新建application_document_requests表,核心字段如下:

  • id 主键
  • application_id 外键,关联对应申请单的ID
  • document_type 材料类型,可存枚举值或者字符串,比如transcript(成绩单)、certificate_of_enrollment(在读证明)
  • status 材料状态,枚举值:pending_upload(待上传)、uploaded(已上传)、rejected(已驳回)、approved(已通过)
  • file_url 学生上传后存储的文件访问地址
  • request_note 大学发起请求时可填的补充要求,可选
  • uploaded_at 上传时间戳
  • created_at 请求创建时间戳
  • updated_at 记录更新时间戳

如果你的系统里可选材料列表是全局统一维护的,还可以额外建document_templates字典表,存储所有可选材料的名称、格式要求、大小限制等,document_type字段直接关联该表的主键即可。
只有当你的业务完全不需要给单个材料加任何额外属性、后续也没有扩展计划、只是单纯存个要求的材料名列表的时候,才考虑用数组字段存储,否则都优先选单条存储的方案。

2. 学生侧材料列表展示逻辑

  • 数据查询:首先根据当前登录学生的ID,关联查询所有属于该学生、且状态为pending_upload或rejected的application_document_requests记录,按关联的申请单分组展示即可
  • 展示内容:每条材料项要展示对应的大学名称、申请项目名称、材料类型要求、状态标签,如果是驳回状态还要展示驳回原因,以及对应上传入口/已上传文件的预览入口
  • 优化体验:可增加顶部筛选栏,支持按申请状态、材料状态筛选,也可以加未上传材料的数量提醒,方便学生快速处理待办

3. 材料全量上传校验逻辑

分两个场景做校验即可:

单份材料上传校验

学生上传单份材料时,前端先做文件格式、大小的前置校验,上传到存储服务成功后,把对应application_document_requests记录的状态更新为uploaded,同时写入文件地址和上传时间。

全量材料完成校验

要判断某份申请的所有请求材料是否全部上传,直接查询该application_id关联的所有application_document_requests记录,检查是否存在状态为pending_upload的记录:

  • 无待上传记录:说明所有要求的材料都已提交,可给对应申请单标记documents_completed的状态,也可以触发通知提醒大学侧审核
  • 有待上传记录:统计剩余未上传的数量,在学生端、大学端的申请详情页都展示提醒即可

如果业务要求所有请求材料上传完成后才能提交最终申请,在学生提交申请的接口里加一层前置校验即可,只要还存在待上传的材料请求,就拦截提交操作并提示学生上传剩余材料。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:12:01