2010-07-05 2 views
1

사용자 친구 목록을 반환하는 컨텍스트 프로세서가 있습니다. 여기인증 된 사용자를위한 조건부 컨텍스트 프로세서

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

내가하려고했던 두 가지 버전이 있습니다 : 현재 내가 어떤 사용자없이 깨끗한 데이터베이스를 가지고 있고 오류를 받고 있어요 때문에, 사용자가 로그인 한 경우에만 친구의 사전을 반환하는 데 싶습니다 운이 없다. 일치하지 않는 사용자를 검색하는 이유는 무엇입니까?

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} 

답변

4

시스템이 UserProfiles를 어떻게 생성하는지 모르지만 사용자가 로그인 한 경우에도 UserProfile이 없을 수 있습니다. 당신은 사용자 프로필을 가정 코드가 존재하지 않을 수도 있습니다 작성해야 : 동기화하여 사용자 프로필을 생성하지 않는 동안 UserProfile.get 그래서()는 DoesNotExist 예외를 제기, 관리자를 만들기 때문에이 오류를 얻고있다

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

네, 그게 제가 성취하려는 것입니다. 감사합니다 – muntu

+0

예를 들어 데이터를 수정하거나 트리거를 추가하여 사용자 프로필을 만드는 등의 업스트림을 수정하는 것이 좋습니다. 그렇지 않으면 사용자와 작업 할 때마다 악의적 인 시도를 시도하거나 잡아야합니다. – mlissner

0

.

변경이 :

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

에 :

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

당신은 괜찮아요.

관련 문제