Example #1
0
    def post(self, request, *args, **kwargs):
        """Like/dislike posts and comments"""

        user = self.request.user
        is_dislike = request.GET.get('type', None) == 'dislike'
        post_or_comment_id = self.kwargs['pk']
        is_comment = request.GET.get('comment', False)
        if is_comment:
            # Comment to like
            post_or_comment = Comment.objects.get(pk=post_or_comment_id)
            post_id = post_or_comment.post.pk
        else:
            # Post to like
            post_or_comment = Blog.objects.get(pk=post_or_comment_id)
            post_id = post_or_comment.pk

        like_qs = post_or_comment.likes.filter(author=user)
        if like_qs.exists():
            like_obj = like_qs.first()
            if like_obj.dislike == is_dislike:
                like_obj.delete()
            else:
                like_obj.dislike = is_dislike
                like_obj.save()
        else:
            like_obj = Like(dislike=is_dislike, author=user)
            if is_comment:
                like_obj.comment = post_or_comment
            else:
                like_obj.post = post_or_comment
            like_obj.save()

        return HttpResponseRedirect(
            reverse('blog-detail', kwargs={'pk': post_id}))