es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Excepción: No existe una consulta coincidente

Estoy tratando de generar un token para los usuarios que soliciten restablecer la contraseña. Tengo un modelo para manejar y almacenar esto.

models.py

class ForgetPassword(models.Model):

    user = models.ForeignKey(CustomUser, on_delete= models.CASCADE)
    forget_password_token = models.CharField(max_length=100)
    created_at = models.DateTimeField(auto_now_add= True)

    def __str__(self):
        return self.user.email

Las funciones de vista que manejan la solicitud son las siguientes

views.py

def forget_password(request):

    try:

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

            if CustomUser.objects.filter(email = user_email).exists():

                user_obj = CustomUser.objects.get(email = user_email)

                name = user_obj.full_name
                plan = user_obj.plan

                print("\n este es el usuario : ", user_obj, " este es su nombre : ", name,"\n")

                token = str(uuid.uuid4())

                fp = ForgetPassword.objects.get(user = user_obj)
                fp.forget_password_token = token
                fp.save()

                forget_password_mail.delay(user_email, name, token)
                messages.info(request, 'Se ha enviado un correo electrónico a su correo registrado.')
                return redirect('forget-password')  
            else:
                messages.info(request, 'El usuario no existe')
                return redirect('forget-password')   

        except Exception as e:

            print("\nla excepción viene de forget_password: ", e, "\n")

    return render(request, 'fp_email_form.html')

Entonces, aquí estoy tratando de obtener primero al usuario en user_obj desde mi modelo CustomUser, luego intento obtener el mismo usuario en el modelo ForgetPassword y almacenar el token en ese usuario. Pero obtengo la siguiente excepción

No existe coincidencia de ForgetPassword.

Por favor, sugiera o corrija donde estoy equivocado.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando obtener una instancia del modelo ForgetPassword usando el método get() directamente, sin asegurarte de que exista. Y si no existe, estás obteniendo la excepción DoesNotExist. En su lugar, debes usar el método get_or_create() que obtendrá un registro existente o creará uno nuevo si no existe.

    Reemplaza las siguientes líneas de código:

    fp = ForgetPassword.objects.get(user=user_obj)
    fp.forget_password_token = token
    fp.save()
    

    Con:

    fp, created = ForgetPassword.objects.get_or_create(user=user_obj)
    fp.forget_password_token = token
    fp.save()
    

    Esto debería resolver tu problema.

Comments are closed.