Django 2.0.7中clean_title抛出的ValidationError无法在页面显示怎么解决
问题原因
问题出在views.py的逻辑里:不管表单校验是否通过,你都用form = CreateForm()重新生成了一个空白的表单实例,覆盖了之前携带校验错误信息的form对象。模板渲染的是全新的空白表单,自然不会展示错误提示。
修复方法
调整视图逻辑,仅在表单校验通过后再重置表单/跳转,校验失败时直接将携带错误的form实例传给模板即可。推荐采用重定向的写法避免表单重复提交,修正后的代码如下:
from django.shortcuts import render, redirect from .models import Product from .forms import ProductForm as CreateForm, PureDjangoForm def create_form(request): if request.method == "POST": form = CreateForm(request.POST) if form.is_valid(): form.save() # 保存成功后重定向到当前页或其他业务页,替换为你实际的路由名即可 return redirect("create_form") else: # GET请求时生成空白表单 form = CreateForm() context = { 'form': form } return render(request, "create_product_form.html", context)
如果暂时不需要重定向,也可以用简化写法:
def create_form(request): form = CreateForm(request.POST or None) if form.is_valid(): form.save() # 仅在保存成功时重置表单 form = CreateForm() context = { 'form': form } return render(request, "create_product_form.html", context)
修改后重新提交不符合规则的标题,就能在表单字段上方看到对应的校验错误提示。
内容的提问来源于stack exchange,提问作者Ruslan
相关产品推荐
相关产品推荐

