2017-09-30 5 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)}) 

문제는 로그 아웃하고 다시 로그인 할 때, 포스트 뷰가 다시 증가한다는 것이다 : 나는 사용자가 블로그 게시물을 읽고이 함수를 호출합니다. 그렇다면 장고는 사용자가 로그 아웃 할 때 세션을 삭제하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

답변

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}) 

는 희망이 도움이! 그것은 나를 의 post_detail 기능이 작동하지 않습니다 때문에

+0

를 더 그것의 사용자가 이전 포스트 볼 경우에도 계산 : ( –

+0

내가 등록을 관리자 패널에서 UserSeenPosts 및 없습니다 사용자가 게시물을 볼 때 UserSeenPosts 객체가 생성되지 않는 이유는 무엇입니까? –

+0

@ mohammedqudah는 업데이트 된 답변 –

0

내가 Jahongir Rahmonov 응답을 편집하려면 :

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

을 참조하십시오. 코드는 내 것과 동일한 기능을하지만 길어집니다. –