2010-07-05 27 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,但看起來即使在用戶登錄時,有可能是他們沒有用戶配置。你應該寫你的代碼假設用戶配置可能不存在:

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 2010-07-05 03:04:00

+0

可能值得一提的是,解決這個上游問題可能更好,例如,通過修復數據或添加觸發器來創建用戶配置文件。否則,你必須嘗試/趕上你與用戶一起工作的每一個惡臭時刻。 – mlissner 2014-12-15 23:29:28

0

你得到一個錯誤,因爲在創建管理員同時同步不會創建您的用戶配置,所以UserProfile.get()拋出一個異常DoesNotExist。

改變這一點:

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

到:

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

和你的罰款。