Je stocke des informations supplémentaires par utilisateur en utilisant le AUTH_PROFILE_MODULE
.
On peut accéder à l'utilisateur dans un template 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 transmettre explicitement le profil dans le modèle à chaque fois?
python
django
django-templates
Swaroop CH
la source
la source
Je ne sais pas pourquoi c'est différent pour moi, mais je dois utiliser {{user}} plutôt que {{request.user}}.
la source
django.template.context_processors.request
insèrerequest
dans le modèle, tandis que l'django.contrib.auth.context_processors.auth
insèreuser
dans le contexte. docs.djangoproject.com/en/1.10/ref/templates/api/…Oui, il est possible d'accéder au profil à partir du modèle en utilisant request.user.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 administrateurs. Donc, appeler directement à
{{ request.user.get_profile.whatever }}
partir 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é à partir du modèle, sinon appelez à
get_profile()
partir du bloc try-except dans votre vue et passez-le au modèle.la source
{{ request.user.get_profile.whatever }}
, mais{{ request.user.get_profile }}
fonctionnera et pourra être utilisée pour vérifier si un profil existe ou non dans les versions actuelles. Voir docs.djangoproject.com/en/dev/ref/templates/api/… . Il y a une note que cela changera dans la version de développement, cependant, voir le paragraphe au-dessus de celui auquel j'ai lié.Si vous utilisez Django> 1.5, vous ne pouvez plus utiliser
get_profile
.Si vous possédez une ancienne application, vous devez la supprimer
AUTH_PROFILE_MODULE = 'myapp.profile'
de votresettings.py
.Si vous utilisez
models.OneToOneField(User)
dans votre classe Profile, vous pouvez simplement utiliserdans votre template Django
la source
request
clavier à l'avant?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 }}
Email:
{{ user.email }}
Session commencée à:
{{ user.last_login }}
Un exemple de résultat est comme ceci:
Merci :)
la source
Travail !
Dans votre modèle de profil, indiquez related_name
Puis dans l'utilisation du modèle. Ici, nom_entreprise est un champ dans la table de profil
la source