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?

È stato utile?

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 }}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top