困難

2017-04-12 8 views
0

私はユーザーがお互いをフォローするオプションを与えたい私のViews.py困難

class FollowToggle(RedirectView): 
def get_redirect_url(self,*args,**kwargs): 
    username = self.kwargs.get("username") 
    userprofile = self.kwargs.get("userprofile") 
    user = self.request.user 
    obj = get_object_or_404(UserProfile, user=user) 
    if user.is_authenticated(): 
     if user in obj.follow.all(): 
      obj.follow.remove(user) 
     else: 
      obj.follow.add(user) 
    url_ = obj.get_absolute_url() 
    return url_ 

でクラスに問題があります。私は後でAPIで使うこの呼び出しを持っています。 (すべてがセットアップされ、実行されていますが)今はすべてそれはそれに従っています。したがって、ユーザーがhttp://127.0.0.1:8000/profiles/testuser/followを実行している場合、それは最後のページにリダイレクトされ、モデルのデータが更新されますが、追跡されたユーザーはユーザー自身です。 問題はobj.follow.remove(user)であるとわかりました。ここで 'user'は 'username'でなければなりませんが、これは私にエラー(10( 'testuser'を基にしたint()の無効なリテラル)を投げます。

誰かがこれを解決する方法を知っている場合は、私に知らせてください。

Models.py:

class UserProfile(models.Model): 
    follow = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True,default=1, related_name='follow') 

    def get_follow_url(self): 
     return reverse("profiles:follow-toggle", kwargs={"user": self.user}) 

    def get_api_follow_url(self): 
     return reverse ("profiles:follow-api-toggle", kwargs={"user": self.user}) 

    def get_absolute_url(self): 
     return reverse("profiles", kwargs={"username": self.user}) 
+0

あなたの質問は少し混乱しています/ testuser/follow'は1つのように見えます。 – Alasdair

答えて

0

は、URLからユーザー名またはプロファイル文字列を取り、ユーザーオブジェクトを取得するためにそれを使用する必要があります。ビューは2 kwargsから `username`と` userprofile`が、URLを、 `/プロファイルがあるため、あなたはその後、obj.follow.add()や` `obj.follow.remove()でこれを使用することができます`

other_user_username = self.kwargs.get("username") 
other_user = get_object_or_404(User, username=other_user_username) 
... 
obj.follow.add(other_user) 
+1

最後の行に 'obj.follow.add(other_user)'と表示されている可能性があります。 –

+0

が動作します。どうもありがとう。私はこれを5時間座っています。今私はAPIのいくつかの小さな問題を抱えているが、私はそれを把握する:) – hansTheFranz