|
发表于 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 ,这个错误消息将会被添加到表单的错误中,你就可以在模板中显示出来。 |
|