2013-03-06 5 views
0

J'ai une application dans laquelle un modèle étend le mode utilisateur.Relations clés étrangères entre 2 applications et le modèle utilisateur

class ExtendedUser (models.Model): 
    user = models.ForeignKey(User) 
    favorite_color = models.CharField(... 
    #... 

J'ai une autre application qui a aussi une clé étrangère avec le modèle de l'utilisateur.

Je voulais savoir comment puis-je accéder à toutes les informations relatives à un utilisateur particulier?

Mon problème vient quand je tente de faire des relations inverses (je pense), voici ce que j'essaie:

>>from django.contrib.auth.models import User 
>>from firstapp.models import ExtendedUser 

>>a = User.objects.get(pk=1) 
>>a 
<User: username1> 
>>b = a.favorite_color 
AttributeError: 'User' object has no attribute 'favorite_color' 
>>c = ExtendedUser.objects.get(pk=1) 
>>c 
<User: username1> 
>>c.favorite_color 
<Favorite_color: blue> 

Le problème est quand je suis sur « un » Je ne peux pas accéder aux informations de modèle étendu sur l'utilisateur, comme "favorite_color", et quand je suis sur "c" je ne peux pas accéder aux informations natives du modèle utilisateur telles que les emails ou les permanentes. Y a-t-il un moyen de faire cela?

Et aussi,

est-il un moyen où je peux choisir un nom d'utilisateur et voir tous les champs (de tous les modèles et applications) qui sont liés à cet objet?

Répondre

1

Mais ce n'est pas « étendre le modèle de l'utilisateur » du tout. Vous avez une référence à un modèle complètement différent, via une ForeignKey. Je ne sais pas pourquoi vous vous attendez à favorite_color devenir soudainement un attribut sur le modèle utilisateur.

Au lieu d'un ForeignKey (ce qui implique de nombreux ExtendedUsers pour chaque utilisateur), utilisez un OneToOneField. Alors vous pouvez suivre la relation directement:

user = User.objects.get(pk=1) 
print user.extendeduser.favorite_color 
+0

Merci! J'apprends toujours ici: p. – nitochi

Questions connexes