Error al gurdar nuevo password | 'QuerySet' object has no attribute 'user'

160 views
Skip to first unread message

Iñaki Retegi

unread,
Apr 4, 2021, 5:27:51 AM4/4/21
to Django-es
Buenos días amantes de Django,
Trato de buscar el usuario mediante el token que lo encuentra bien:
<QuerySet [<TokenToUser: retegi84>]>

Y a ese usuario (en este caso retegi84), guardarle el nuevo password (password1).

El código es el siguiente:

t = TokenToUser.objects.filter(token=token)
print(t.user)
u = User.objects.get(username__in=t.user)
print(u)
u.password=password1
u.save()

Pero me devuelve el siguiente error.

AttributeError at /users/user_newPassword/FrMS5bsSdELAUV7ShH3jyZb6fZY7V3hyWt'QuerySet' object has no attribute 'user'

El error lo marca en la linea:

u = User.objects.get(username__in=t.user)

Alejandro

unread,
Apr 5, 2021, 7:55:06 AM4/5/21
to Django-es
Cuando se trabaja con queryset, siempre que uses "filter" el resultado sera un objecto QuerySet. El error es por que en la siguiente linea llamas al un atributo que solo esta definido para objectos de User, no para el QuerySet. 
La solucion es utilizar "get". de esta manera aseguras que devuelva un unico objeto de la clase "User".  Seria asi:  t = TokenToUser.objects.get(token=token)

Eso corrige el error que ya estas presentando. Luego, muy posiblemente,  tendras otro error en "u = User.objects.get(username__in=t.user)"  Simplemente, usar "get"  con la expresion "__in" no tiene mucho sentido. A mi me parece que t.user deberia devolver el objeto User. Pero la forma como lo usas, luego de la expresion "__in", pareciera que devuelve una lista y de un unico elemento. Pero aqui habria que ver los modelos que has definido para entender que esta mal. 

Por ultimo, las passwords son encriptadas y cambiarla haciendo un "u.password=password1" no es lo recomendado. Django trae una funcion que garantiza la seguridad.  Puedes averiguar siguiendo el link:  set_password() 

Iñaki Retegi

unread,
Apr 5, 2021, 8:35:00 AM4/5/21
to djan...@googlegroups.com
Muchas gracias Alejadro.
Tendré muy en cuenta y probaré esas indicaciones.

Un saludo.

--
--
Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del Framework Django de habla hispana" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a djan...@googlegroups.com
Para anular la suscripción a este grupo, envíe un mensaje a django-es-...@googlegroups.com
Para obtener más opciones, visita este grupo en http://groups.google.com.bo/group/django-es.
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Django-es" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/django-es/zRvtoyYDnLw/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a django-es+...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/django-es/d67223f6-0659-4cb1-b0b9-59601b6e30f4n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages