本地变量'用户'在分配问题之前引用

时间:2017-06-18 22:23:28

标签: python django

所以我目前有我喜欢的应用程序处理朋友请求,它工作正常,但我的通知似乎没有工作。每当有人喜欢别人而不管天气如何,他们都会被该用户所喜欢,或者只发送两个notify.send中的第二个。我认为这是一个问题" user = get_object_or_404(User,username = user.username)"但是我不知道如何绕过它。这是我的代码:

def like_user(request, id):
    pending_like = get_object_or_404(User, id=id)
    user_like, created = UserLike.objects.get_or_create(user=request.user)
    user = get_object_or_404(User, username=user.username)
    liked_user, like_user_created = UserLike.objects.get_or_create(user=user)
    if pending_like in user_like.liked_users.all():
        user_like.liked_users.remove(pending_like)
    elif request.user in liked_user.liked_users.all():
        user_like.liked_users.add(pending_like)
        notify.send(request.user, 
                        #action=request.user.profile, 
                    target=request.user.profile, 
                    recipient=pending_like,
                    verb='sent you a friend request view'), 
    else:
        user_like.liked_users.add(pending_like)
        notify.send(request.user, 
                        #action=request.user.profile, 
                    target=request.user.profile, 
                    recipient=pending_like,
                    verb='accepted your friend request view')
    return redirect("profile", username=pending_like.username)

这是一个行"如果request_user在likes_user.liked_users.all()中:"工作正常,我认为因为线" user = get_object_or_404(User,username = username)"有用户名。

@login_required
def profile_view(request, username):
    user = get_object_or_404(User, username=username)
    liked_user, like_user_created = UserLike.objects.get_or_create(user=user)
    do_they_like = False
    if request.user in liked_user.liked_users.all():
        do_they_like = True 

然而,在我的第一段代码中,我尝试使用user.username而不是username = username但我收到错误"本地变量' user'在转让之前引用"。围绕这个最好的方法是什么?我完全错了吗?我应该尝试传入用户名,因为当我这样做时我会得到错误" like_user()只需要3个参数(2个给定)"。对不起django很新,任何帮助都会受到大力赞赏!

这是我喜欢的app模型,有助于:

class UserLike(models.Model):
    user = models.OneToOneField(User, related_name='liker')
    liked_users = models.ManyToManyField(User, related_name='liked_users', blank=True)

    objects = UserLikeManager()


    def __unicode__(self):
        return self.user.username

    def get_mutual_like(self, user_b):
        i_like = False
        you_like = False
        if user_b in self.liked_users.all():
            i_like = True
        liked_user, created = UserLike.objects.get_or_create(user=user_b)
        if self.user in liked_user.liked_users.all():
            you_like = True 
        if you_like and i_like:
            return True
        else:
            return False

对于长篇文章真的很抱歉,但我非常坚持,因为大部分内容都是由一些比我更先进而写的,我还有解决它的问题,任何帮助都会受到大力赞赏!

感谢

1 个答案:

答案 0 :(得分:3)

你是对的,问题在于:

user = get_object_or_404(User, username=user.username)

您正在尝试获取“用户”对象的属性“用户名”,但尚未在您的函数范围内定义“用户”。换句话说,那时'用户'还不存在。

我没有足够的信息来开始帮助你,但如果是我调试的话,我会考虑以下内容:

  • 您可能根本不需要那条有问题的线路。似乎request.user保存对用户的引用(喜欢东西的人?),pending_like似乎包含对类似收件人的引用。这可能足以建立一个“喜欢”的关系

  • 也许打印pending_like print(pending_like.__dict__)和request.user print(request.user.__dict__)的属性,看看它们是否包含您需要的所有信息?