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

Django 3中ValidationError无法显示的问题求助

Django表单验证错误无法在模板显示的问题排查与修复

你的问题出在视图函数create的逻辑错误,导致带有验证错误信息的表单被覆盖,模板最终拿到的是一个全新的空表单,所以field.errors没有内容。

错误原因分析

在create函数中,你处理POST请求时创建了带提交数据的form = TrainForm(request.POST),如果验证失败,你把错误存到了errors_Main,但随后又执行了form = TrainForm()——这会直接创建一个空的表单实例,覆盖了之前带有错误信息的表单对象。模板渲染时用的是这个空表单,自然看不到任何错误提示。

修复后的视图代码

修改views.py,确保验证失败时,传递给模板的是带有错误信息的表单实例:

from django.shortcuts import render, redirect
from .forms import TrainForm

def create(request):
    if request.method == 'POST':
        form = TrainForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('create')  # 验证成功后重定向,避免重复提交
    else:
        form = TrainForm()  # GET请求时才创建空表单
    context = {'form': form}
    return render(request, 'MainApp/create.html', context)

修改说明

  1. 把空表单的初始化移到else分支中,只有当请求是GET时才创建空表单;
  2. 验证成功后添加redirect,这是Django处理表单提交的最佳实践,防止用户刷新页面重复提交;
  3. 不需要额外的errors_Main变量,Django的表单对象会自动存储错误信息,模板中直接通过field.errors即可访问。

验证效果

现在提交超过100的数字,模板里的field.errors就能正常显示你在clean_*方法中定义的ValidationError提示了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:25:33