您的位置:

最佳方案处理django ValidationError("The two titles must be the same")

  发布时间:2023-04-05 11:03:55
报错的原因这个错误是在Django中自定义验证时出现的。这通常表示在验证某些字段时,两个标题不相同。如何解决解决这个错误的方法是在自定义的验证函数中进行比较,如果不同就抛出例如,在注册表单中需要用户输入密码两次,在表单验证函数中,可以比较两次输入的密码是否相同,如果不同,就抛出ValidationError,并提示用户两次输入的密码不同这样当用户提交表单时,如果两次输入的密码不同,就会抛出ValidationError,提示用户两次输入的密码不同。

报错的原因

"ValidationError("The two titles must be the same")"这个错误是在Django中自定义验证时出现的。这通常表示在验证某些字段时,两个标题不相同。例如在注册表单中,需要用户输入密码两次,如果两次输入的密码不同,就会出现这个错误。

如何解决

解决这个错误的方法是在自定义的验证函数中进行比较,如果不同就抛出ValidationError

例如,在注册表单中需要用户输入密码两次,在表单验证函数中,可以比较两次输入的密码是否相同,如果不同,就抛出ValidationError,并提示用户两次输入的密码不同。


from django import forms
from django.core.exceptions import ValidationError

class RegisterForm(forms.Form):
    password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput)

    def clean_password2(self):
        password1 = self.cleaned_data.get("password1")
        password2 = self.cleaned_data.get("password2")
        if password1 and password2 and password1 != password2:
            raise forms.ValidationError("Passwords don't match")
        return password2

这样当用户提交表单时,如果两次输入的密码不同,就会抛出ValidationError,提示用户两次输入的密码不同。

使用例子

是的,这是一个简单的例子,假设在注册表单中需要用户输入用户名和密码两次,需要检查用户名和密码是否相同,如果不同就抛出ValidationError


from django import forms
from django.core.exceptions import ValidationError

class RegisterForm(forms.Form):
    username = forms.CharField(label='Username')
    password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput)

    def clean_password2(self):
        username = self.cleaned_data.get("username")
        password1 = self.cleaned_data.get("password1")
        password2 = self.cleaned_data.get("password2")
        if username==password1 or password1 != password2:
            raise forms.ValidationError("username and password must be different, Passwords don't match")
        return password2

在上面的例子中,表单验证函数`clean_password2`会比较用户名和密码是否相同,如果相同就抛出ValidationError,提示用户username and password must be different, Passwords don't match。

如果想更复杂的验证可以使用clean方法


class RegisterForm(forms.Form):
    username = forms.CharField(label='Username')
    password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput)

    def clean(self):
        cleaned_data = super(RegisterForm, self).clean()
        username = cleaned_data.get("username")
        password1 = cleaned_data.get("password1")
        password2 = cleaned_data.get("password2")

        if username == password1:
            self.add_error('username', "username and password must be different")
        if password1 != password2:
            self.add_error('password2', "Passwords don't match")

这里使用了clean方法,在clean方法中比较用户名和密码是否相同,如果相同就抛出ValidationError,提示用户username and password must be different, Passwords don't match。