J'ai de la confusion concernant ce à quoi request.user fait référence dans Django? Fait-il référence au champ nom d'utilisateur dans la table auth_user ou fait-il référence à l'instance du modèle utilisateur?
J'ai eu ce doute car je n'ai pas pu accéder au champ e-mail dans le modèle à l'aide de {{request.user.username}}
ou {{user.username}}
.
Donc, à la place, j'ai fait ce qui suit dans le fichier de vues:
userr = User.objects.get(username=request.user)
Et passé userr
au modèle et accédé au champ e-mail comme {{ userr.email }}
.
Bien que ça marche mais je voulais avoir une certaine clarté à ce sujet.
Si votre modèle reçoit AnonymousUser , la référence à {{request.user.email}}
ne sera pas trouvé. Auparavant, vous devez demander si {{request.user.is_authenticated }}
.
Vous devez vérifier s'il est inclus Django.core.context_processors.auth
processeur de contexte dans TEMPLATE_CONTEXT_PROCESSORS
section des paramètres. Si vous utilisez Django 1.4 ou plus récent, le processeur de contexte est Django.contrib.auth.context_processors.auth
. Ce processeur de contexte est responsable d'inclure l'objet utilisateur dans chaque demande.
request.user
est un objet de modèle utilisateur.
Vous ne pouvez pas accéder à l'objet de demande dans le modèle si vous ne transmettez pas explicitement request
. Si vous souhaitez accéder à l'objet utilisateur à partir du modèle, vous devez le transmettre au modèle ou utiliser RequestContext.
Cela dépend de ce que vous définissez.
Donc, il vaut mieux utiliser
user = User.objects.get(username=request.user.username)
En fait, vous n'avez pas besoin de définir de telles variables si vous ajoutez 'Django.core.context_processors.request'
dans le TEMPLATE_CONTEXT_PROCESSORS
liste dans settings.py
Vous pouvez ensuite accéder à la variable {{request.user.username}} dans les modèles si vous utilisez render
dans views.py
request.user fait référence à l'instance de modèle utilisateur réelle.
request.user.FIELDNAME vous permettra d'accéder à tous les champs du modèle utilisateur