Como acessar o perfil do usuário em um modelo de Django?
-
05-07-2019 - |
Pergunta
Eu estou armazenando algumas informações do usuário por adicional, usando o AUTH_PROFILE_MODULE
.
Podemos acessar o usuário em um modelo de Django usando {{ request.user }}
mas como podemos acessar campos no perfil desde o perfil só é acessível através de um user.get_profile()
função?
É realmente necessário para explicitamente passar o perfil para o modelo de cada vez?
Solução
Use {{ request.user.get_profile.whatever }}
. linguagem de templates do Django automaticamente chama as coisas que são resgatáveis ??-. Neste caso, o método .get_profile()
Outras dicas
Não tenho certeza por isso que é diferente para mim, mas eu preciso usar {{user}} em vez de {{request.user}}.
Sim, é possível perfil de acesso do modelo usando request.user.get_profile
No entanto, há uma pequena ressalva : nem todos os usuários terão perfis, que estava no meu caso com usuários administradores. Então, chamando diretamente
{{ request.user.get_profile.whatever }}
a partir do modelo causará um erro em tais casos.
Se você estiver certo de que todos os usuários sempre têm perfis é seguro para chamar de modelo, get_profile()
outro modo de chamada de dentro try-exceto bloco na sua opinião e passá-lo para o modelo.
Se você estiver usando Django> 1,5 você não pode mais usar get_profile
.
Se você tiver um aplicativo de legado, você deve remover AUTH_PROFILE_MODULE = 'myapp.profile'
do seu settings.py
.
Se você usar models.OneToOneField(User)
em sua classe de perfil, você pode simplesmente usar
{{ request.user.profile.whatever }}
no seu modelo de Django
Se ajudar alguém, eu usei o seguinte no meu modelo:
Nome de usuário: {{ user.username }}
Usuário Nome completo: {{ user.get_full_name }}
User Group: {{ user.groups.all.0 }}
E-mail: {{ user.email }}
Session Iniciado em {{ user.last_login }}
Um resultado da amostra é assim:
Usuário: auditor Ezio
User Group: auditGroup
Nome de usuário: testUser03
E-mail: testuser03@auditor.com
sessão começou no- 16 de abril de 2018, 9:38 p.m.
Obrigado:)
Working!
Em seu modelo de perfil fornecem related_name
user = models.OneToOneField(AUTH_USER_MODEL, related_name="user_profile", on_delete=models.CASCADE)
Em seguida, no uso de modelo. Aqui company_name é campo na tabela perfil
{{ request.user.user_profile.company_name }}