La consulta coincidente no existe Error en Django

He implementado una funcionalidad de recuperación de contraseña en django. Con mi método, la nueva contraseña será enviada a su ID de correo electrónico ingresada. Y está funcionando bien cuando doy el correo electrónico correcto (ID de correo electrónico que existe en la base de datos). Pero cuando doy una identificación de correo electrónico que no está en la base de datos, me da este error ‘DoesNotExist at / forgotPassword /

La consulta de coincidencia de detalles de la universidad no existe. ‘. ¿Alguien puede ayudar a resolver esto? Pegaré mi código aquí. ¿Puede alguien ayudarme a resolver este problema?

forgotPassword.html ()

def forgotPassword(request): if request.POST: email=request.POST.get("email") user = UniversityDetails.objects.get(email=email) if(not user): print "No user" return render_to_response("forgotPassword.html") else: newPassword = user.password send_mail('Password Recovery', 'The password for your site is '+ newPassword, 'rv_nair@gmail.com', ['rv_ks@gmail.com'], fail_silently=False) return render_to_response("passwordRecovery.html") return render_to_response('forgotPassword.html') 

html

  
Enter your E-mail ID

 try: user = UniversityDetails.objects.get(email=email) except UniversityDetails.DoesNotExist: user = None 

También veo que estás guardando tus contraseñas en texto plano (¡una gran seguridad, no, no!). ¿Por qué no usas el sistema de autenticación incorporado?

Yo también tuve este problema. Esto se debió a que el servidor de desarrollo no eliminó la sesión de django después de una cancelación de depuración en Aptana, con la posterior eliminación de la base de datos. (Lo que significa que el identificador de un registro de base de datos inexistente todavía estaba presente en la sesión la próxima vez que se iniciara el servidor de desarrollo)

Para resolver esto durante el desarrollo, utilicé

 request.session.flush() 

Puedes intentarlo de esta manera. solo usa una función para obtener tu objeto

 def get_object(self, id): try: return UniversityDetails.objects.get(email__exact=email) except UniversityDetails.DoesNotExist: return False 

Como se menciona en los documentos de Django , cuando el método get no encuentra ninguna entrada o encuentra varias entradas, genera una excepción, este es el comportamiento esperado:

get () genera MultipleObjectsReturned si se encontró más de un objeto. La excepción MultipleObjectsReturned es un atributo de la clase modelo.

get () genera una excepción DoesNotExist si no se encontró un objeto para los parámetros dados. Esta excepción es un atributo de la clase modelo.

El uso de excepciones es una forma de manejar este problema, pero en realidad no me gusta el bloque de try-except feo. Una solución alternativa, y más limpia para mí, es usar la combinación de filter + first .

 user = UniversityDetails.objects.filter(email=email).first() 

Cuando haces .first() a un conjunto de consultas vacío, devuelve None . De esta manera puede tener el mismo efecto en una sola línea.

La única diferencia entre capturar la excepción y usar este método se produce cuando tiene varias entradas, la primera generará una excepción mientras que la segunda establecerá el primer elemento, pero al usar get puedo asumir que no caeremos en esta situación .

Tenga en cuenta que el first método fue agregado en Django 1.6.

Puedes usar esto en tu caso, funcionará bien.

 user = UniversityDetails.objects.filter(email=email).first() 

En caso de que alguien esté aquí y las otras dos soluciones no hagan el truco, compruebe que lo que está utilizando para filtrar es lo que espera:

 user = UniversityDetails.objects.get(email=email) 

¿Es el correo electrónico un str o un None ? o un int ?