2017-06-18 15 views
0

私は現在、友人のリクエストを処理する好きなアプリを持っていますが、うまくいきますが、通知がうまくいかないようです。誰かが天気に関係なく他の誰かを好きになるたびに、そのユーザーが気に入っているかどうかは、2つのnotify.sendのうちの2番目のものだけを送信します。私は、 "user = get_object_or_404(User、username = user.username)"という行に問題があると推測していますが、どうやってそれを取得するのか分かりません。ここに私のコードは次のとおりです。ライン "ユーザー= get_object_or_404(ユーザー、ユーザー名ので、私は推測正常に動作します:ここでローカル変数 'user'が割り当ての問題の前に参照されています

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()の場合は、」ここでの例であります= 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を使用しようとしているが、私はエラー「ローカル変数 'ユーザの割り当ての前に参照さ」を得ます。これを一番いい方法は何ですか?私はそれを完全に間違っているのですか?私は、 "like_user()が3つの引数(2が与えられた)を正確に取る"というエラーを受け取るので、私はユーザー名で試して渡すべきですか?大変申し訳ありませんが、どんな助けも大いに評価されるでしょう!ここで

それは助け包みなさい私の好きなアプリモデルである:

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を使用することです。 Alvarezありがとうございました! – caldf

関連する問題