Метод clean (self) не вызывается, если if form.is_valid () - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть RegisterUserForm, который привязан к CustomUser (который расширяет AbstractUser). Прежде чем сохранить пользователя, я хочу проверить пароль1 и пароль2, если они равны, но метод clean (self) не вызывается. пользователь создается, даже если пароли не совпадают. Я прочитал много вопросов и перепробовал много вещей, но не смог найти ответ. Мой код ниже

Я пытался добавить init и метод сохранения, но все равно не работает.

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 })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...