2010-07-05 7 views
1

J'ai un processeur de contexte retournant la liste des amis utilisateurs. Je voudrais revenir à le dictionnaire d'amis que si l'utilisateur est connecté, car actuellement je base de données propre sans utilisateurs et je reçois l'erreur:Processeur de contexte conditionnel pour les utilisateurs authentifiés

Exception Type: DoesNotExist at /
Exception Value: UserProfile matching query does not exist.

Voici deux versions que je tentais mais sans chance. Pourquoi est-il toujours à la recherche d'un utilisateur correspondant alors qu'il ne le devrait pas?

def friends_list(request): 
    if request.user.is_authenticated: 
     userprofile = UserProfile.objects.get(user=request.user) 
     friends = Friend.objects.filter(friend_of=userprofile) 
    else: 
     friends = {} 
    return {'friends': friends} 

def friends_list(request): 
    userprofile = UserProfile.objects.get(user=request.user) 
    if userprofile: 
     friends = Friend.objects.filter(friend_of=userprofile) 
    else: 
     friends = {} 
    return {'friends': friends} 

Répondre

4

Je ne sais pas comment votre système crée UserProfiles, mais il semble que même lorsque l'utilisateur est connecté, il peut y avoir aucune UserProfile pour eux. Vous devez écrire votre code en supposant que le UserProfile peut ne pas exister:

def friends_list(request): 
    userprofile = None 
    if request.user.is_authenticated: 
     try: 
      userprofile = UserProfile.objects.get(user=request.user) 
     except DoesNotExist: 
      pass 
    if userprofile: 
     friends = Friend.objects.filter(friend_of=userprofile) 
    else: 
     friends = [] 
    return {'friends': friends} 
+0

oui, c'est ce que j'essayais de réaliser. merci – muntu

+0

Il est probablement utile de mentionner qu'il est probablement préférable de corriger cela en amont, par exemple, en corrigeant vos données ou en ajoutant un déclencheur pour créer les profils utilisateur. Sinon, vous devez essayer/attraper ce chaque fois que vous travaillez avec les utilisateurs. – mlissner

0

Vous obtenez une erreur, car la création de l'administrateur tout en synchronisant ne crée pas votre UserProfile, donc UserProfile.get() soulève une exception DoesNotExist.

changer ceci:

userprofile = UserProfile.objects.get(user=request.user) 

à:

userprofile,created = UserProfile.objects.get_or_create(user=request.user) 

et vous êtes très bien.

Questions connexes