2017-06-18 89 views
0

所以我目前有我的喜歡的應用程序處理朋友的請求,它工作正常,但我的通知似乎並沒有工作。無論何時,無論天氣如何,他們都喜歡其他人,他們只會發送兩個notify.send中的第二個。我認爲它的行「用戶= get_object_or_404(用戶,用戶名= 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在liked_user.liked_users.all():」,其中一個例子工作正常我相信,因爲行「用戶= get_object_or_404(用戶,用戶名=用戶名)「有用戶名。

@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而不是用戶名=用戶名,但我得到的錯誤「局部變量‘用戶’賦值之前引用」。這是最好的方法是什麼?我完全錯了嗎?我應該嘗試並通過用戶名,因爲當我做我得到錯誤「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 

真正爲長期職位對不起了,但是我非常卡住,因爲大多數的這種被寫了一些更高級的不是我,把即時通訊有問題修復它,任何幫助將大力讚賞!

感謝

回答

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__),看看他們是否包含所有你需要的信息?

+0

而解決方法是使用'request.user.username' –

+0

@L。阿爾瓦雷斯謝謝你! – caldf

相關問題