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

2 回答 2

5

我不知道您的系统如何创建用户配置文件,但看起来即使用户登录,也可能没有用户配置文件。假设 UserProfile 可能不存在,您应该编写代码:

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}
于 2010-07-05T02:19:47.250 回答
0

您收到错误,因为在同步时创建管理员不会创建您的 UserProfile,因此 UserProfile.get() 会引发 DoesNotExist 异常。

改变这个:

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

到:

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

你很好。

于 2010-07-05T02:34:05.453 回答