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)
修改说明
- 把空表单的初始化移到
else分支中,只有当请求是GET时才创建空表单; - 验证成功后添加
redirect,这是Django处理表单提交的最佳实践,防止用户刷新页面重复提交; - 不需要额外的
errors_Main变量,Django的表单对象会自动存储错误信息,模板中直接通过field.errors即可访问。
验证效果
现在提交超过100的数字,模板里的field.errors就能正常显示你在clean_*方法中定义的ValidationError提示了。
内容的提问来源于stack exchange,提问作者user781897326671
相关产品推荐
相关产品推荐

