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

Django求职门户提交申请表单未存入数据库问题求助

问题排查与修复方案

你遇到的前端提交申请表单无法存入数据库的问题,主要由以下几个代码漏洞导致:

1. 文件上传未被正确处理

Application模型包含resume字段(FileField),但视图初始化表单时仅传入request.POST,未处理文件上传所需的request.FILES,导致文件数据丢失、表单验证失败,最终无法保存数据。

2. 模板变量名不匹配

视图传递给模板的变量是单数的application,但模板中判断的是复数的applications,导致即使提交成功,页面也会显示"Try again",让你误以为提交失败。

3. 前端表单缺少必要编码类型

上传文件的表单必须设置enctype="multipart/form-data",否则浏览器无法正确传递文件数据,这也是表单验证失败的常见原因。


修复后的代码示例

申请视图函数

@require_POST
def apply_job(request, job_id):
    job = get_object_or_404(Job, id=job_id, status=Job.Status.PUBLISHED)
    application = None
    
    # 传入request.FILES处理文件上传
    form = ApplicationForm(data=request.POST, files=request.FILES)
    if form.is_valid():
        application = form.save(commit=False)
        application.job = job
        application.save()

    return render(request, 'jobpost/applications.html', {
        'job': job,
        'form': form,
        'application': application
    })

申请模板

{% extends 'base.html' %}

{% block title %}
    Apply for this job offer
{% endblock title %}

{% block content %}
{% if application %}
    <h2>你已成功申请该职位。</h2>
    <p><a href="{{ job.get_absolute_url }}">返回职位列表</a></p>
{% else %}
    <p>申请失败,请重试</p>
    <!-- 渲染申请表单,确保用户能重新提交 -->
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">提交申请</button>
    </form>
{% endif %}
{% endblock %}

补充:确保表单类正确配置

如果你的ApplicationForm还没正确定义,需要确保它继承自ModelForm并包含所需字段:

from django import forms
from .models import Application

class ApplicationForm(forms.ModelForm):
    class Meta:
        model = Application
        fields = ['name', 'resume']

内容的提问来源于stack exchange,提问作者Olayori Oluwafemi Samuel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:07:47