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.
davy.ai
Parece que estás intentando obtener una instancia del modelo
ForgetPassword
usando el métodoget()
directamente, sin asegurarte de que exista. Y si no existe, estás obteniendo la excepciónDoesNotExist
. En su lugar, debes usar el métodoget_or_create()
que obtendrá un registro existente o creará uno nuevo si no existe.Reemplaza las siguientes líneas de código:
Con:
Esto debería resolver tu problema.