2016-12-20 2 views
0

Ich habe django Builtin Benutzermodell erweitert. Ich verwende derzeit django 1.10.Wie erweiterte Benutzer benutzerdefinierte Felder in Django Vorlage erhalten?

Ich versuche, Benutzername, short_name in Vorlage anzuzeigen. Anmerkung: short_name ist Feld

erweitert
<span> {{ request.user.profile.username }} </span> 
<span> {{ user.profile.username }} </span> 
{{ user.get_username }} 
{{ user.username }} 

diese Template-Tag funktioniert nicht für django 1.10

ich diesen Link zum Erstellen von benutzerdefinierten Benutzermodell verwendet haben https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html

dies mit Ich möchte Rolle angezeigt werden basierter Inhalt.

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 

    employee_name = models.CharField(max_length=50) 
    short_name = models.CharField(max_length=50) 
    access = (
     ('admin', 'admin'), 

     ('director', 'director'), 
     ('management', 'management'), 
     ('employee', 'employee'), 
    ) 
    access_control = models.CharField(max_length=50, choices=access) 
    YES_NO = (
     ('yes', 'Yes'), 
     ('no', 'No'), 
    ) 
    active = models.CharField(max_length=50, choices=YES_NO) 

unten Linien in den Einstellungen hinzugefügt:

AUTH_PROFILE_MODULE = "user_login.UserProfile" 

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.request', 
"django.contrib.auth.context_processors.auth", 
) 

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [os.path.join(BASE_DIR, 'templates'), ], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 

Antwort

2

Wenn Sie eine ForeignKey als Beziehung mit user haben, können Sie ihn nicht über user.userprofile.short_name zugreifen, wenn Sie nicht related_name in Ihrem Bereich definiert haben haben, können Sie es von user.userprofile_set.first().short_name bekommen würde, jetzt können Sie den Beziehungstyp ändern auf diese Weise OneToOneField und Verwendung als user.userprofile.short_name, funktioniert nur mit OneToOne Beziehung

+0

Ich habe Modelle zu user = models.OneToOneField (User, on_delete = models.CASCADE) migriert Aber auch jetzt funktioniert es nicht für mich auch {{request.user.username}} das funktioniert nicht. Muss ich mehr als nur einen Kontext an die Vorlage senden? – Hariprasad

+0

muss '{{request.user.userprofile.short_name}}' sein, wenn Sie '{{request.user.username}}' verwenden, beziehen Sie sich auf das Feld username des Benutzermodells –

1

Zunächst wird die Beziehung von Benutzer zu Userprofile userprofile genannt.

Zweitens ist username auf dem Hauptbenutzermodell; Ihr zusätzliches Feld heißt short_name. Also:

{{ user.userprofile.short_name }} 
+0

{{user.userprofile.short_name}} für mich nicht funktioniert, können Probleme in meinen Einstellungen – Hariprasad

+0

als deutsche Punkte aus, haben Sie eine ForeignKey nicht ein OneToOneField. Das macht keinen Sinn, Sie sollten es in eins zu eins ändern, dann wird diese Syntax funktionieren. –

0

Der Benutzername Feld ist in dem Benutzermodell, so Dinge wie {{ request.user.profile.username }}{{ request.user.username }} sein sollte. Ihr Profilmodell heißt UserProfile und Sie geben keinen umgekehrten Beziehungsnamen an. Daher heißt es standardmäßig userprofile, also {{ user.userprofile.short_name }}, nicht {{ user.profile.short_name }}. Beachten Sie, dass Sie jedes Objekt in den Vorlagen verwenden müssen, wenn Sie es im Kontext übergeben.

Verwandte Themen