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

Django表单验证失败:POST表单提交后始终返回undone问题排查

表单提交后始终显示"undone"的问题解决办法

问题回顾

你通过POST表单提交员工数据时,页面一直显示undone,推测是表单验证未通过,我帮你检查了代码,发现几个关键错误:

视图函数里的核心问题

先看你的视图代码,有两个致命错误导致数据无法保存,进而target一直是undone:

1. 模型实例化缺少括号

你创建Employee对象时只是引用了类,没有生成实例:

em=models.Employee  # 错误写法

必须加上括号才能创建一个新的员工实例:

em=models.Employee()  # 正确写法

2. 调用save方法时缺少括号

em.save只是指向了保存方法,没有真正执行保存操作,必须加括号调用:

em.save  # 错误写法
em.save()  # 正确写法

可选优化:添加错误调试信息

为了方便你排查表单验证失败的具体原因,建议把表单对象传递到模板里,这样就能看到详细的错误提示。修改后的视图函数如下:

def addit(request): 
    if request.method == 'POST': 
        target = "undone"
        # POST请求下直接传递request.POST和request.FILES即可,不需要or None
        forms = employeeForm(request.POST, request.FILES)
        if forms.is_valid(): 
            em = models.Employee()
            em.fname = forms.cleaned_data["fname"] 
            em.cne = forms.cleaned_data["cne"] 
            em.lname = forms.cleaned_data["lname"] 
            em.division = forms.cleaned_data["division"] 
            em.pic = forms.cleaned_data["pic"] 
            em.salary = forms.cleaned_data["salary"] 
            em.save()
            target = "done"
        # 把表单对象传给模板,验证失败时显示错误
        return render(request, "home.html", {"target": target, "form": forms})
    # 处理GET请求(比如首次打开页面)
    else:
        forms = employeeForm()
        return render(request, "home.html", {"form": forms})

然后在你的home.html模板里添加错误显示代码,这样就能直观看到哪里不符合验证规则:

{% if form.errors %}
    <div style="color: red; padding: 10px; border: 1px solid red;">
        {% for field in form %}
            {% for error in field.errors %}
                <p>{{ field.label }}: {{ error }}</p>
            {% endfor %}
        {% endfor %}
        {% for error in form.non_field_errors %}
            <p>{{ error }}</p>
        {% endfor %}
    </div>
{% endif %}

修复后的完整视图函数

上面的优化版已经是修复后的完整代码,你替换原来的视图函数后,再测试表单提交,应该就能正常显示done了。如果还是有问题,看模板里的错误提示就能知道具体是哪个字段验证失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:23:12