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

je stocke quelques informations supplémentaires par utilisateur en utilisant le AUTH_PROFILE_MODULE .

nous pouvons accéder à L'utilisateur dans un modèle Django en utilisant {{ request.user }} mais comment accéder aux champs dans le 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?

81

6 réponses

utiliser {{ request.user.get_profile.whatever }} . Le langage Templier de Django appelle automatiquement les choses qui sont appelables - dans ce cas, la méthode .get_profile() .

129
répondu AdamKG 2009-01-07 21:24:09

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

22
répondu Rachel 2010-01-22 17:00:28

Oui il est possible d'accéder au profil à partir du modèle en utilisant demande.utilisateur.get_profile

cependant il y a une petite mise en garde : tous les utilisateurs n'auront pas de profils, ce qui était dans mon cas avec les utilisateurs admin. Donc appeler directement {{ request.user.get_profile.whatever }} du modèle causera une erreur dans de tels cas.

si vous êtes sûr que tous vos utilisateurs ont toujours des profils, il est sûr d'appeler à partir du modèle, sinon appelez get_profile() de dans try-sauf bloquer dans votre vue et le passer au modèle.

8
répondu Sergey Golovchenko 2014-07-12 19:55:03

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

si vous avez une application legacy, 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 modèle Django

4
répondu Sascha Rau 2017-05-18 14:26:17

S'il aide quelqu'un, j'ai utilisé les 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 }}

Email: {{ user.email }}

Session commencée à: {{ user.last_login }}

un résultat d'échantillon est comme ceci:

utilisateur: auditor ezio

groupe D'utilisateurs: auditGroup

nom d'utilisateur: testUser03

courriel: testuser03@auditor.com

Session commencée à-le 16 avril 2018, 21: 38

Merci:)

2
répondu Mohammad 2018-04-16 17:34:26

ça marche !

dans votre modèle de profil fournir related_name

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

puis dans le modèle d'utilisation. Ici company_name est le champ dans la table de profil

{{ request.user.user_profile.company_name }}
0
répondu Nids Barthwal 2018-08-28 10:10:59