Come accedere al profilo utente in un modello Django?
-
05-07-2019 - |
Domanda
Sto memorizzando alcune informazioni aggiuntive per utente usando il rel AUTH_PROFILE_MODULE
.
Possiamo accedere all'utente in un modello Django usando {{request.user}}
ma come possiamo accedere ai campi nel profilo poiché il profilo è accessibile solo tramite una funzione utente. get_profile ()
?
È davvero necessario passare esplicitamente il profilo nel modello ogni volta?
Soluzione
Usa {{request.user.get_profile.whatever}}
. Il linguaggio di template di Django chiama automaticamente cose che possono essere richiamate - in questo caso, il metodo .get_profile ()
.
Altri suggerimenti
Non so perché sia ??diverso per me, ma devo usare {{user}} anziché {{request.user}}.
Sì, è possibile accedere al profilo dal modello utilizzando request.user.get_profile
Comunque c'è un piccolo avvertimento : non tutti gli utenti avranno profili, come nel mio caso con gli utenti admin. Quindi chiamare direttamente
{{request.user.get_profile.whatever}}
dal modello causerà un errore in questi casi.
Se sei sicuro che tutti i tuoi utenti abbiano sempre profili, è sicuro chiamare dal modello, altrimenti chiama get_profile ()
dall'interno del blocco try-tranne nella tua vista e passalo al modello.
Se stai usando Django > 1.5 non puoi più usare get_profile
.
Se hai un'app legacy, dovresti rimuovere AUTH_PROFILE_MODULE = 'myapp.profile'
dal tuo settings.py
.
Se usi models.OneToOneField (Utente)
nella tua classe Profile, puoi semplicemente usare
{{ request.user.profile.whatever }}
nel tuo modello Django
Se aiuta qualcuno, ho usato i seguenti nel mio modello:
Nome utente: {{user.username}}
Nome completo dell'utente: {{user.get_full_name}}
Gruppo utenti: {{user.groups.all.0}}
Email: {{user.email}}
Sessione iniziata da: {{user.last_login}}
Un risultato di esempio è così:
Utente: auditor ezio
Gruppo utenti: auditGroup
Nome utente: testUser03
Email: testuser03@auditor.com
Sessione iniziata il 16 aprile 2018, 21:38
Grazie :)
Funzionante!
Nel modello del tuo profilo fornire related_name
user = models.OneToOneField(AUTH_USER_MODEL, related_name="user_profile", on_delete=models.CASCADE)
Quindi nell'uso del modello. Qui company_name è field nella tabella dei profili
{{ request.user.user_profile.company_name }}