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

Django求职申请提交失败、无法跳转dashboard的代码排查

问题排查结果与解决方案

核心问题点

  • 模板错误展示逻辑失效:你在apply_for_job.html中使用{% for error in form.errors %}遍历错误,form.errors是字典结构,直接遍历会输出字段名而非具体错误信息,导致表单验证失败时无任何可见提示,仅表现为页面刷新。
  • 手写表单无内容回填:手动编写的textarea未绑定表单已有值,当提交验证失败时,用户输入的内容会全部清空,进一步误导提交未生效的判断。
  • 必填字段校验无提示:Application模型中的content、experience字段未设置blank=True,属于必填项,提交空内容会直接触发form.is_valid()返回False,不会执行保存和跳转逻辑。
  • 缩进风险:粘贴的代码存在缩进混乱,需确认实际代码中apply_for_job视图的所有逻辑都正确缩进在函数体内,否则会触发语法错误或分支逻辑不生效。

修复步骤

  1. 修正模板错误展示逻辑
    替换原有错误遍历代码,改为分字段展示错误并回填内容,修改后的表单核心代码如下:

    <form method="post" action=".">
        {% csrf_token %}
    
        {% if form.non_field_errors %}
            {% for error in form.non_field_errors %}
                <div class="notification is-danger">{{ error }}</div>
            {% endfor %}
        {% endif %}
    
        <div class="field">
            <label>Content</label>
            <div class="control">
                <textarea class="textarea" name="content" id="id_content">{{ form.content.value }}</textarea>
                {% if form.content.errors %}
                    {% for error in form.content.errors %}
                        <p class="help is-danger">{{ error }}</p>
                    {% endfor %}
                {% endif %}
            </div>
        </div>
    
        <div class="field">
            <label>Experience</label>
            <div class="control">
                <textarea class="textarea" name="experience" id="id_experience">{{ form.experience.value }}</textarea>
                {% if form.experience.errors %}
                    {% for error in form.experience.errors %}
                        <p class="help is-danger">{{ error }}</p>
                    {% endfor %}
                {% endif %}
            </div>
        </div>
    
        <div class="field">
            <div class="control">
                <button class="button is-success">Submit</button>
            </div>
        </div>
    </form>
    

    也可以直接使用Django内置表单渲染方法替换手写字段,减少重复代码:

    <form method="post" action=".">
        {% csrf_token %}
        {{ form.as_p }}
        <button class="button is-success">Submit</button>
    </form>
    
  2. 临时调试定位问题
    在视图中添加打印语句,确认POST请求是否正常进入分支、表单验证的具体错误:

    @login_required
    def apply_for_job(request, job_id):
        job = Job.objects.get(pk=job_id)
        if request.method == 'POST':
            form = ApplicationForm(request.POST)
            print("POST数据:", request.POST)
            print("表单校验错误:", form.errors)
            if form.is_valid():
                application = form.save(commit=False)
                application.job = job
                application.created_by = request.user
                application.save()
                return redirect('dashboard')
        else:
            form = ApplicationForm()
        return render(request, 'jobs/apply_for_job.html', {'form': form, 'job': job})
    
  3. 确认缩进规范
    检查视图函数内所有代码的缩进是否统一(一般为4个空格),避免因缩进错误导致逻辑分支不执行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 18:15:04