2017-09-30 1 views
0

Djangoを使用してブログを作成していますが、各投稿の閲覧回数をカウントしたいと思います。ユーザーは、ブログの記事を読むとき、私はこの関数を呼び出す:djangoビューカウンタを修正しました

def post_detail(request, post_id): 
    if 'viewed_post_%s' % post_id in request.session: 
     pass 
    else: 
     print "adding" 
     add_view = Post.objects.get(id=post_id) 
     add_view.views += 1 
     add_view.save() 
    request.session['viewed_post_%s' % post_id] = True 
    return render(request, 'blog/detail.html', {'Post': Post.objects.get(id=post_id)}) 

問題がログアウトして再度ログインする際に、ポストビューが再び増加していることです。では、なぜユーザーがログアウトしたときにdjangoがセッションを削除するのですか?これをどのように修正できますか?

答えて

0

sessionsは一時的なものなので、永続的な情報を保存するセッションに頼ることはできません。

class UserSeenPosts(models.Model): 
    user = models.ForeignKey(User, related_name='seen_posts') 
    post = models.ForeignKey(Post) 

してから、このような何かを:

最も簡単な方法は、追加のモデルを追加することです

def post_detail(request, post_id): 
    post = Post.objects.get(id=post_id) 

    if not request.user.seen_posts.filter(post_id=post_id).exists(): 
     print "adding" 
     post.views += 1 
     post.save() 
     UserSeenPosts.objects.create(user=request.user, post=post)    

    return render(request, 'blog/detail.html', {'Post': post}) 

はそれが役に立てば幸い!

+0

何ユーザーが以前のポストを見ていてもカウントしないです:( –

+0

私は管理パネルでUserSeenPostsを登録し、ユーザがUserSeenPostsオブジェクトを作成していない投稿を表示すると、なぜ –

+0

@ mohammedqudahが更新された回答 –

0

それは私のため post_detail機能を働いていないので、私はJahongirラフモノフの答えを編集したい:

def post_detail(request, post_id): 
    post = Post.objects.get(id=post_id) 
    if UserSeenPosts.objects.filter(post=post, user=request.user).exists(): 
     pass 
    else: 
     post.views += 1 
     post.save() 
     UserSeenPosts.objects.create(user=request.user, post=post) 
    return render(request, 'blog/detail.html', {'Post': Post.objects.get(id=post_id)}) 
+0

を参照してください。あなたのコードは私と同じことをしますが、それはもっと長くなります。 –

関連する問題