Форма сброса пароля Django не работает, в чем проблема?

Моя цель - сбросить пароль, отправив пользователю письмо по электронной почте. Когда пользователь нажмет на ссылку, которая отправляется по почте, откроется Html page, в котором будет password и confirm password форма. Система отправки электронной почты работает хорошо, когда я нажимаю на ссылку, которая отправляется по почте, открывается password reset form. Но проблема в том, форма сброса пароля не работает. Пароль не меняется. Где на самом деле возникла проблема? Пароль не меняется. Где собственно возникла проблема? Пожалуйста, дайте мне соответствующее решение😢...

helper.py:

from django.core.mail import send_mail
from django.conf import settings 


def send_forget_password_mail(email , token ):
    subject = 'Your forget password link'
    message = f'Hi , click on the link to reset your password http://127.0.0.1:8000/changepassword/{token}/'
    email_from = settings.EMAIL_HOST_USER
    recipient_list = [email]
    send_mail(subject, message, email_from, recipient_list)
    return True

views.py:

def ChangePassword(request, token):

    context = {}

    try:
        profile_obj = User.objects.filter(forget_password_token=token).first()

        print(profile_obj)

        if request.method == 'POST':
            new_password = request.POST.get('new_password')
            confirm_password = request.POST.get('reconfirm_password')
            user_id = request.POST.get('user_id')

            if user_id is None:
                messages.warning(request, 'No user id found.')
                return redirect(f'/changepassword/{token}/')

            if  new_password != confirm_password:
                messages.warning(request, 'both should  be equal.')
                return redirect(f'/changepassword/{token}/')

            return redirect('login_user')

        context = {'user_id' : profile_obj.user.id}


    except Exception as e:
        print(e)

    
    return render(request, 'new_password.html', context)

def forgot_password(request):

    try:
        if request.method == 'POST':
            email = request.POST.get('email')

            if not User.objects.filter(email=email).first():
                messages.warning(request, 'Not user found with this username.')
                return redirect('forgot_password')

            user_obj = User.objects.get(email = email)
            token = str(uuid.uuid4())

            send_forget_password_mail(user_obj.email , token)

            messages.success(request, 'an email is send.')
            return redirect('forgot_password')
            
    except Exception as e:
        print(e)

    context ={

    }
    return render(request,'forgot.html', context)

urls.py:

path('changepassword/<token>/', views.ChangePassword, name="changepassword"),
path('forgot_password/', views.forgot_password, name="forgot_password"),

forgot.html:

<form method="POST" action="#!" class="needs-validation mt-5" style="font-size:13px;" novalidate="" autocomplete="off">
{% csrf_token %} 
    <input id="email" type="email" class="form-control " style="font-size:13px;" name="email" value="" required autofocus>
    <button type="submit" class="btn btn-outline-dark ms-auto" style="font-size: 12px;"> Send Link </button>
</form>

new_password.html

<form action="" method="POST" class="needs-validation poppins_font" style="font-size: 13px;" novalidate=""autocomplete="off">
{% csrf_token %}

    <input id="password" style="font-size: 13px;" type="password" class="form-control" name="new_password" required>
    <input id="confirm_password" style="font-size: 13px;" type="password" class="form-control" name="reconfirm_password" required>

    <input type="hidden" name="user_id" value="{{user_id}}">

    <button type="submit" class="btn btn-outline-dark ms-auto" style="font-size: 12px;">Set</button>

</form>

models.py:

class User(AbstractUser):

    email = models.EmailField( max_length=150,unique=True,error_messages={"unique":"The email must be unique."})

    forget_password_token = models.CharField(max_length=100, blank=True, null=True)

Я думаю, что проблема в том, что вы не сохраняете пароль в базе данных, и поэтому пароль не меняется. Попробуйте сделать что-то вроде:

def ChangePassword(request, token):

    context = {}

    try:
        profile_obj = User.objects.filter(forget_password_token=token).first()

        print(profile_obj)

        if request.method == 'POST':
            new_password = request.POST.get('new_password')
            confirm_password = request.POST.get('reconfirm_password')
            user_id = request.POST.get('user_id')

            if user_id is None:
                messages.warning(request, 'No user id found.')
                return redirect(f'/changepassword/{token}/')

            if  new_password != confirm_password:
                messages.warning(request, 'both should  be equal.')
                return redirect(f'/changepassword/{token}/')
                 

            else:
                profile_obg.password = new_password
                profile_obg.save()



            return redirect('login_user')

        context = {'user_id' : profile_obj.user.id}


    except Exception as e:
        print(e)

    
    return render(request, 'new_password.html', context)

Обратите внимание на добавление оператора else, который означает "если нет ошибки, сохраните пароль в базе данных"

Вернуться на верх