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?
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()
.
Je ne sais pas pourquoi c'est différent pour moi, mais je dois utiliser {} plutôt que{demande.utilisateur.}}
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.
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
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:)
ç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 }}