首页 > 解决方案 > 如果 form.is_valid() 不调用 clean(self) 方法

问题描述

我有一个绑定到 CustomUser(扩展 AbstractUser)的 RegisterUserForm。在我保存用户之前,我想检查 password1 和 password2 是否相等,但不调用 clean(self) 方法。即使密码不同,也会创建用户。我已经阅读了很多问题并尝试了很多东西,但找不到答案。我的代码如下

我尝试添加一个 init 和一个 save 方法,但仍然不起作用。

class RegisterUserForm(forms.ModelForm):
    password1=forms.CharField(label=_("password"), min_length=4)
    password2=forms.CharField(label=_("repeat password"), min_length=4)

    class Meta:
        model = CustomUser
        fields = ('first_name', 'last_name', 'email', 'password1','password2')


        def save(self, *args, **kwargs):
            self.full_clean()
            return super().save(*args, **kwargs)

        def clean(self):
            cleaned_data = super().clean()
            print("clean is called")
            password1 = form.cleaned_data.get("password1")
            password2 = form.cleaned_data.get("password2")
            if password1 and password2 and password1 != password2:
                raise ValidationError('password_mismatch')

            return self.cleaned_data

我的观点是

def register(request):
    if request.method=='POST':
        form = RegisterUserForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.set_password(form.cleaned_data['password1'])
            user.save()
            email = user.email
            messages.success(request, f'user with {email} created successfully')
            return redirect('home')
    else:
        form = RegisterUserForm()
    return render(request, 'users/register.html', {'form':form })

标签: djangodjango-forms

解决方案


推荐阅读