Pregunta

Estoy almacenando información adicional por usuario utilizando AUTH_PROFILE_MODULE .

Podemos acceder al usuario en una plantilla de Django usando {{request.user}} pero, ¿cómo accedemos a los campos en el perfil ya que solo se puede acceder al perfil a través de una función usuario? get_profile () ?

¿Realmente se requiere que pase el perfil explícitamente a la plantilla cada vez?

¿Fue útil?

Solución

Utilice {{request.user.get_profile.whatever}} . El lenguaje de plantillas de Django llama automáticamente a cosas que se pueden llamar, en este caso, el método .get_profile () .

Otros consejos

No estoy seguro de por qué es diferente para mí, pero necesito usar {{user}} en lugar de {{request.user}}.

Sí, es posible acceder al perfil desde la plantilla usando    request.user.get_profile

Sin embargo, hay una pequeña advertencia : no todos los usuarios tendrán perfiles, como en mi caso con los usuarios administradores. Así que llamando directamente     {{request.user.get_profile.whatever}} de la plantilla causará un error en tales casos.

Si está seguro de que todos sus usuarios siempre tienen perfiles, es seguro llamar desde la plantilla; de lo contrario, llame a get_profile () desde el bloque try-except en su vista y páselo a la plantilla.

Si está utilizando Django > 1.5 ya no puede usar get_profile .

Si tienes una aplicación heredada, debes eliminar AUTH_PROFILE_MODULE = 'myapp.profile' de tu settings.py .

Si usa models.OneToOneField (User) en su clase de perfil, simplemente puede usar

{{ request.user.profile.whatever }}

en tu plantilla de Django

Si ayuda a alguien, usé lo siguiente en mi plantilla:

Nombre de usuario: {{user.username}}

Nombre completo del usuario: {{user.get_full_name}}

Grupo de usuarios: {{user.groups.all.0}}

Correo electrónico: {{user.email}}

La sesión comenzó en: {{user.last_login}}

Un resultado de ejemplo es así:

  

Usuario: auditor ezio

     

Grupo de usuarios: auditGroup

     

Nombre de usuario: testUser03

     

Correo electrónico: testuser03@auditor.com

     

La sesión comenzó el 16 de abril de 2018 a las 9:38 p.m.

Gracias :)

Trabajando!

En tu modelo de perfil, proporciona related_name

user = models.OneToOneField(AUTH_USER_MODEL, related_name="user_profile", on_delete=models.CASCADE)

Luego en uso de plantilla. Aquí company_name es el campo en la tabla de perfiles

{{ request.user.user_profile.company_name }}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top