Django пользовательская модель пользователя нужен пароль2 для формы входа в систему

у меня есть модель пользователя custome и форма для входа в систему, но в form.is_valid() у меня ошибка:

  • password2
  • Это поле обязательно для заполнения.
  • моя модель пользователя:

    class MyAccountManager(BaseUserManager):
        def create_user(self, email,username,password=None):
            if not email:
                raise ValueError('لطفا ایمیل را وارد کنید')
            user = self.model(
                email=self.normalize_email(email),
                username=username,
            )
            user.set_password(password)
            user.save()
            user.save(using=self._db)
            return user
    
        def create_superuser(self, email,username, password):
            user = self.create_user(
                email=self.normalize_email(email),
                username=username,
                password=password,
            )
            user.is_admin= True
            user.is_active=True
            user.is_staff=True
            user.is_superuser=True
            user.save()
            user.save(using=self._db)
            return user
    class User(AbstractBaseUser,PermissionsMixin):
        username = models.CharField(max_length=100 , null=True)
        mobile = models.CharField(max_length=100, null=False, verbose_name="موبایل")
        email = models.CharField(max_length=180, verbose_name='ایمیل', unique=True, default=None, blank=True, null=True)
        type = models.ForeignKey("userType.mUsertype", on_delete=models.CASCADE, verbose_name="نوع کاربری", null=True)
        addressmain = models.TextField(verbose_name="آدرس")
        website = models.CharField(max_length=100 , null=True)
        logo_url = models.CharField(max_length=100 , null=True)
        facebook_id = models.CharField(max_length=100 , null=True)
        instagram_id = models.CharField(max_length=100, null=True)
        telegram_id = models.CharField(max_length=100 , null=True)
        whatsapp_id = models.CharField(max_length=100, null=True, verbose_name="واتس آپ")
        twitter_id = models.CharField(max_length=100 , null=True)
        description = models.TextField(verbose_name="توضیحات")
        plan_expiry_date = models.DateTimeField(null=True)
        plan_count = models.IntegerField(default=0)
        country = models.CharField(max_length=100 , null=True)
        city = models.CharField(max_length=100 , null=True)
        is_admin = models.BooleanField(default=False)
        is_active = models.BooleanField(default=True)
        is_staff = models.BooleanField(default=False)
        is_superuser = models.BooleanField(default=False)
        USERNAME_FIELD = 'email'
        REQUIRED_FIELDS = ['username']
        objects = MyAccountManager()
        def tokens(self):
            return 'token'
        def __str__(self):
            return self.username.__str__()
    

    моя форма:

    class SigninForm(UserCreationForm):
        def __init__(self, *args, **kwargs):
            super(SigninForm, self).__init__(*args, **kwargs)
        class Meta:
            model = User
            widgets={
                'email': forms.TextInput(attrs={'placeholder': 'ایمیل'}),
                'password1': forms.PasswordInput(attrs={'placeholder': 'پسورد'}),
            }
            fields = ("email","password1")
    
    
    class SignupForm(UserCreationForm):
        def __init__(self, *args, **kwargs):
            super(SignupForm, self).__init__(*args, **kwargs)
            self.fields['password1'].widget = forms.PasswordInput(
                attrs={'class': 'form-control', 'placeholder': 'پسورد'})
            self.fields['password2'].widget = forms.PasswordInput(
                attrs={'class': 'form-control', 'placeholder': 'تکرار پسورد'})
        class Meta:
            model = User
            widgets={
                'username': forms.TextInput(attrs={'placeholder': 'نام'}),
                'email': forms.TextInput(attrs={'placeholder': 'ایمیل'}),
                # 'password1': forms.PasswordInput(attrs={'placeholder': 'پسورد'}),
                # 'password2': forms.PasswordInput(attrs={'placeholder': 'تکرار پسورد'}),
            }
            fields = ("username","email","password1","password2","type")
    

    моя форма в html и это для формы входа:

                            <form  method="post">
                                {% csrf_token %}
                                {{ formsignin.email| add_class:"form-control" }}
                                {% if formsignin.email.errors %}
                                    <div class="errors">
                                        {% for error in  formlogin.username.errors%}
                                            <p>{{ error }}</p>
                                        {% endfor %}
                                    </div>
                                {% endif %}
                                {{ formsignin.password1| add_class:"form-control" }}
                                {% if formsignin.password1.errors %}
                                    <div class="errors">
                                        {% for error in  formlogin.password.errors%}
                                            <p>{{ error }}</p>
                                        {% endfor %}
                                    </div>
                                {% endif %}
                                <button class="btn btn-info" name='submit' type="submit" value='sign_in'>ورود</button>
                            </form>
    

    и мое мнение:

    def signin(request):
        if request.method == 'POST':
            print(request.POST)
            if request.POST.get('submit') == 'sign_in':
                form = SigninForm(request.POST)
                print(form.errors)
                if form.is_valid:
                    email = form.cleaned_data.get('email')
                    password = form.cleaned_data.get('password')
                    user = authenticate(email=email, password=password)
                    if user is not None:
                        login(request,user)
                        return redirect('home')
                    else:
                        messages.info(request,"نام کاربری یا رمز عبور اشتباه است")
                else:
                    messages.info(request, "form is not true")
            elif request.POST.get('submit') == 'sign_up':
                print(request.POST)
                username = request.POST['username']
                email = request.POST['email']
                type = request.POST['type']
                password1 = request.POST['password1']
                password2 = request.POST['password2']
                myuser = User.objects.create_user(email,username,password1)
                myuser.save()
                messages.info(request, "ثبت نام شما با موفقیت ثبت شد")
    
        formsignin = SigninForm()
        formsignup = SignupForm()
        return render(request, "login.html", {'formsignin':formsignin,'formsignup':formsignup})
    

    если я убираю if form.is_valide() у меня ошибка для clean_data но пользователь сохраняет и все работает в чем проблема!?

    Вы можете удалить поле встроенным методом del

    class SigninForm(UserCreationForm):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            del self.fields['password2']
    
    Вернуться на верх