繁体   English   中英

分配问题之前引用的本地变量“用户”

[英]local variable 'user' referenced before assignment issue

所以我目前有一个喜欢的应用程序,它可以处理朋友的请求,并且工作正常,但是我的通知似乎不起作用。 每当有人喜欢其他人而不受天气影响时,无论该用户是否喜欢他们,它都只会发送两个notify.send中的第二个。 我认为它与“用户= 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)

这是一个示例,其中我假定“如果在liked_user.liked_users.all()中的request.user:”行工作正常,因为“ 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刚起步,非常感谢您的帮助!

这是我喜欢的应用程序模型,以帮助您:

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

真的很抱歉,但是我很固执,因为大部分内容是由比我更先进的一些人写的,而即时消息留下了解决问题的方法,我们将不胜感激!

谢谢

您是对的,问题出在以下方面:

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

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

我没有足够的信息来开始为您提供帮助,但是如果是我进行调试,则需要考虑以下事项:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM