web-dev-qa-db-fra.com

Comment accéder au profil utilisateur dans un modèle Django?

Je stocke des informations supplémentaires par utilisateur à l'aide de AUTH_PROFILE_MODULE .

Nous pouvons accéder à l'utilisateur dans un modèle Django en utilisant {{ request.user }}, mais comment accéder aux champs du profil puisque le profil n'est accessible que via une fonction user.get_profile()?

Est-il vraiment nécessaire de passer explicitement le profil dans le modèle à chaque fois?

83
Swaroop C H

Utilisez {{ request.user.get_profile.whatever }}. Le langage de modélisation de Django appelle automatiquement les éléments appelables - dans ce cas, la méthode .get_profile().

130
AdamKG

Je ne sais pas pourquoi c'est différent pour moi, mais je dois utiliser {{utilisateur}} plutôt que {{request.user}}.

23
Rachel

Oui, il est possible d'accéder au profil à partir d'un modèle à l'aide de request.user.get_profile

Cependant, il y a un petit caveat: tous les utilisateurs n'auront pas de profils, ce qui était dans mon cas avec les utilisateurs admin. Alors appelant directement {{ request.user.get_profile.whatever }} du modèle provoquera une erreur dans de tels cas.

Si vous êtes sûr que tous vos utilisateurs ont toujours des profils, vous pouvez appeler en toute sécurité depuis un modèle. Dans le cas contraire, appelez get_profile() à partir du bloc try-except de votre vue et transmettez-le au modèle.

8
Sergey Golovchenko

Si vous utilisez Django> 1.5, vous ne pouvez plus utiliser get_profile.

Si vous avez une application héritée, vous devez supprimer AUTH_PROFILE_MODULE = 'myapp.profile' de votre settings.py.

Si vous utilisez models.OneToOneField(User) dans votre classe de profil, vous pouvez simplement utiliser 

{{ request.user.profile.whatever }}

dans votre template Django

4
Sascha Rau

Si cela aide quelqu'un, j'ai utilisé les éléments suivants dans mon modèle:

Nom d'utilisateur: {{ user.username }}

Nom complet de l'utilisateur: {{ user.get_full_name }}

Groupe d'utilisateurs: {{ user.groups.all.0 }}

Courriel: {{ user.email }}

Session démarrée à: {{ user.last_login }}

Un exemple de résultat est comme ceci:

Utilisateur: auditor ezio 

Groupe d'utilisateurs: auditGroup 

Nom d'utilisateur: testUser03 

Email: [email protected] 

Séance commencée le 16 avril 2018 à 21 h 38.

Merci :)

2
Mohammad

Travail !

Dans votre modèle de profil, indiquez related_name

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

Ensuite, dans l'utilisation du modèle. Ici nom_entreprise est le champ dans la table de profil

{{ request.user.user_profile.company_name }}
0
Nids Barthwal