2010-12-07 31 views
1

je modèle UserProfile contenant un OneToOneField sur une classe appelée Info:Django: l'accès à un à un champ dans les modèles

class UserProfile(models.Model): 
    user = models.OneToOneField(User, primary_key=True) 
    info = models.OneToOneField(Info, null = True, blank= True) 

dans mon modèle, j'ai accès au profil avec

{{user.get_profile}} 

mais comment accéder? J'ai essayé

{{user.get_profile.info.photo.url}} 

sans succès.

+0

Avez-vous défini le paramètre AUTH_PROFILE_MODULE? –

+0

@David Miller: oui, mais c'est une bonne remarque – Mermoz

+0

http://stackoverflow.com/questions/6676134/accessing-django-onetoonefield-in-templates –

Répondre

6

Vous ne pouvez pas faire cela.

user.get_profile() 

est une méthode et il est exécuté lors de l'accès comme

{{user.get_profile}} 

et non lorsque vous essayez d'accéder à d'autres attributs de profil comme {{user.get_profile.attr1}}

La voie est autour d'envoyer l'objet profil de la vue. Et si vous voulez l'avoir dans beaucoup de vue, vous devriez en faire un TemplateContextProcessor.

Il existe également une autre façon d'étendre le modèle User avec un profil d'attribut @property qui fait la même chose que get_profile que vous pouvez utiliser comme described earlier.

+0

Une downvote pour une bonne réponse et aucune explication? Une première pour moi sur Stackoverflow. :( –

+0

Je suis d'accord sur l'iniquité de cette downvote – Mermoz