| 
 | 
 
 
发表于 2023-5-19 16:13:48
|
显示全部楼层
 
 
 
从你的代码来看,你定义了一个  a_user  表单用于处理用户注册,其中包括了 "username", "password", 和 "passwords" 字段。同时你在  a_user  表单中也定义了一个  yz  方法用于验证两次密码是否一致。你的  adminuseradd  视图也处理了 GET 和 POST 请求,对表单的有效性进行检查。 
 
然而,根据 Django 的  ModelForm  表单验证流程,你定义的  yz  方法并没有在验证过程中被调用。因为  ModelForm  的验证流程只会自动调用  clean_<fieldname>  方法,其中  <fieldname>  是你想要对应的字段名。如果你想在验证过程中包含自定义的验证,你应该使用  clean  或者  clean_<fieldname>  方法。 
 
以下是你的代码修改后的样子: 
 
- class a_user(forms.ModelForm):
 
 -     passwords = forms.CharField(
 
 -         label="确认密码",
 
 -         widget=forms.PasswordInput
 
 -     )
 
  
-     class Meta:
 
 -         model = models.admin
 
 -         fields = ["username","password","passwords"]
 
 -         widgets = {"password":forms.PasswordInput}
 
 -         
 
 -     def clean(self):
 
 -         cleaned_data = super().clean()
 
 -         pwd = cleaned_data.get("password")
 
 -         pwds = cleaned_data.get("passwords")
 
 -         if pwds != pwd:
 
 -             raise forms.ValidationError("密码不一致")
 
 -         return cleaned_data
 
  
 
- def adminuseradd(request):
 
 -     if request.method == "GET":
 
 -         form = a_user()
 
 -         return render(request, "adminuseradd.html", {"form": form})
 
  
-     form = a_user(data=request.POST)
 
 -     if form.is_valid():
 
 -         form.save()
 
 -         return redirect('/adminview')
 
 -     else:
 
 -         return render(request, "adminuseradd.html", {"form": form})
 
 
  复制代码 
 
在上述代码中,我将  yz  方法改名为  clean 。当表单调用  is_valid()  方法时,Django 会自动调用这个  clean  方法进行验证。如果  pwds  和  pwd  不一致,它将引发一个  ValidationError ,并附上错误消息 "密码不一致"。这样,在你的视图函数中,如果  form.is_valid()  返回  False ,这个错误消息将会被添加到表单的错误中,你就可以在模板中显示出来。 |   
 
 
 
 |