Django表单即使在应该返回验证错误时也不返回验证错误?
在控制台中,我可以看到它打印了“Less”字符串,这意味着控件将进入“if len(f_N)<2”中,但是没有打印验证错误。请帮我找出密码有什么问题 ####My forms.py文件:#### 请参阅本主题 在Django表单即使在应该返回验证错误时也不返回验证错误?,django,forms,django-forms,validationerror,Django,Forms,Django Forms,Validationerror,在控制台中,我可以看到它打印了“Less”字符串,这意味着控件将进入“if len(f_N)15: self.add_错误('firstName','允许的最大长度为15个字符') 如果len(f_N)
forms.py
中,您从django.core.exceptions导入了ValidationError
的方法是正确的。异常导入了ValidationError
,但随后您在函数clean_firstName()
中以错误的方式引发了它
raise ValidationError('..')
而不是
raise forms.ValidationError('..')
更新
在views.py
中,由于您有form_1=UserRegistrationForm(request.POST)
,因此应该将form_1
传递到render
语句中的上下文,而不是form
。任何你能以正确方式做事的方法(你不再需要第二张表格了):
def UserRegistrationView(请求):
表单=用户注册表单()
if request.method==“POST”:
表单=用户注册表单(request.POST)
如果form.is_有效():
user=form.save(commit=False)
user.save()
#注:
# 1. 如果“form.is_valide()”返回false,则
#获取“form.errors”包中的错误。
# 2. 您不需要导入用户模型,因为您正在使用“formMdel”
#如果成功保存,可能需要重定向到主页
#新用户。。显示一条闪光消息。。
返回呈现(请求,'formsDemo/userRegistration.html',{'form':form})
请参阅此图图尝试添加如下表单错误:
def clean_firstName(self):
f_N=自清理的_数据['firstName']
打印(f_N)
如果len(f_N)>15:
self.add_错误('firstName','允许的最大长度为15个字符')
如果len(f_N)<2:
印刷品(透镜(f_N))
打印(“减少”)
self.add_错误('firstName','minlength showuld为2个字符')
其他:
打印(“结束”)
返回f\N
还要确保始终返回已清理的名字,因为使用当前代码,某些路径将不会返回该名字。因此,为了解决这个问题,只要在所有if
s的return f_N
之外添加一个return f_N
。尝试了您的建议。但仍然面临同样的问题。浏览器中没有错误。HTML代码有任何问题吗???@ArghyaBhattacharya我更新了我的答案,请告诉我它是否有效。@cizaro在模板中添加了此代码段。仍然没有显示出错误。如果有必要,我正在使用Django 3.1.4。@ArghyaBhattacharya第二次更新
from django.shortcuts import render
from .forms import UserRegistrationForm
from .models import User
# Create your views here.
def UserRegistrationView(request):
form=UserRegistrationForm()
if request.method=='POST':
form_1=UserRegistrationForm(request.POST)
if form_1.is_valid() :
#print(form_1.cleaned_data)
form_1=form_1.cleaned_data
print(request.POST)
print(form_1)
user_1=User()
user_1.firstName=form_1['firstName']
user_1.lastName = form_1['lastName']
user_1.email = form_1['email']
user_1.save()
return render(request,'formsDemo/userRegistration.html',{'form':form})
raise ValidationError('..')
raise forms.ValidationError('..')