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视图的所有逻辑都正确缩进在函数体内,否则会触发语法错误或分支逻辑不生效。
修复步骤
修正模板错误展示逻辑
替换原有错误遍历代码,改为分字段展示错误并回填内容,修改后的表单核心代码如下:<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>临时调试定位问题
在视图中添加打印语句,确认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})确认缩进规范
检查视图函数内所有代码的缩进是否统一(一般为4个空格),避免因缩进错误导致逻辑分支不执行。
内容的提问来源于stack exchange,提问作者user9900365
相关产品推荐
相关产品推荐

