所以我目前有我喜欢的应用程序处理朋友请求,它工作正常,但我的通知似乎没有工作。每当有人喜欢别人而不管天气如何,他们都会被该用户所喜欢,或者只发送两个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
对于长篇文章真的很抱歉,但我非常坚持,因为大部分内容都是由一些比我更先进而写的,我还有解决它的问题,任何帮助都会受到大力赞赏!
感谢
答案 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__)
的属性,看看它们是否包含您需要的所有信息?