Advertisement
Guest User

Untitled

a guest
May 27th, 2020
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.81 KB | None | 0 0
  1. model
  2. class Post(models.Model):
  3. title = models.CharField(max_length=100, verbose_name='Заголовок')
  4. content = models.TextField(verbose_name='Содержание')
  5. date_posted = models.DateTimeField(default=timezone.now,
  6. verbose_name='Время', null=True, blank=True)
  7. author = models.ForeignKey(User, on_delete=models.CASCADE,
  8. verbose_name='Автор', blank=True)
  9.  
  10. likes_post = models.ManyToManyField(User, related_name='likes_post', blank=True)
  11.  
  12. def __str__(self):
  13. return self.title
  14.  
  15. def total_likes(self):
  16. return self.likes_post.count()
  17.  
  18.  
  19. def get_absolute_url(self): #дает возможность сылаться на пост для детаил вью
  20. return reverse('post-detail', kwargs={'id': self.id})
  21.  
  22. class Comment(models.Model):
  23. user = models.ForeignKey(User, on_delete=models.CASCADE)
  24. post = models.ForeignKey(Post, on_delete=models.CASCADE)
  25. content = models.TextField(max_length=100000, verbose_name='')
  26. timestamp = models.DateTimeField(auto_now_add=True,
  27. verbose_name='Время', null=True, blank=True)
  28. reply = models.ForeignKey('Comment', on_delete=models.CASCADE, null=True, blank=True, related_name='replies')
  29. likes = models.ManyToManyField(User, related_name='likes', blank=True)
  30. class Meta:
  31. ordering = ['-timestamp']
  32.  
  33. def __str__(self):
  34. return '{}'.format(self.content)
  35.  
  36. def total_likes_com(self):
  37. return self.likes.count()
  38.  
  39. def like_comment(request, pk):
  40.  
  41. comment = get_object_or_404(Comment, id=request.POST.get('comment_id'))
  42. liked_com = False
  43. if comment.likes.filter(id=request.user.id).exists():
  44. comment.likes.remove(request.user)
  45. liked_com = False
  46. else:
  47. comment.likes.add(request.user)
  48. liked_com = True
  49. return HttpResponseRedirect(reverse('post-detail', args=[str(pk)]))
  50.  
  51. def like_post(request, pk):
  52. post = get_object_or_404(Post, id=request.POST.get('post_id'))
  53. liked = False
  54. if post.likes_post.filter(id=request.user.id).exists():
  55. post.likes_post.remove(request.user)
  56. liked = False
  57. else:
  58. post.likes_post.add(request.user)
  59. liked = True
  60. return HttpResponseRedirect(reverse('post-detail', args=[str(pk)]))
  61.  
  62. view
  63.  
  64. class PostDetailView(FormMixin,DetailView):
  65. model = Post
  66. template_name = 'post/post_detail.html'
  67. form_class = CommentForm
  68. paginate_by = 2
  69.  
  70. def get_success_url(self):
  71. return reverse('post-detail', kwargs={'pk': self.object.id})
  72.  
  73. def get_context_data(self, **kwargs):
  74.  
  75. context = super(PostDetailView, self).get_context_data(**kwargs)
  76. context['comments'] = Comment.objects.filter(post=self.object)
  77. context['form_comment'] = CommentForm(initial={'post': self.object})
  78.  
  79. stuff = get_object_or_404(Post, id=self.kwargs['pk'])
  80. total_likes = stuff.total_likes()
  81. liked = False
  82. if stuff.likes_post.filter(id=self.request.user.id).exists():
  83. liked = True
  84. context['total_likes'] = total_likes
  85. context['liked'] = liked
  86.  
  87.  
  88. stuff_comment = get_object_or_404(Comment, id=self.kwargs['pk'])
  89. total_likes_com = stuff_comment.total_likes_com()
  90. liked_com = False
  91. if stuff_comment.likes.filter(id=self.request.user.id).exists():
  92. liked_com = True
  93. context['total_likes_com'] = total_likes_com
  94. context['liked_com'] = liked_com
  95. return context
  96.  
  97. url
  98. path('like_comment/<int:pk>', like_comment, name='like_comment'),
  99. path('like_post/<int:pk>', like_post, name='like_post'),
  100.  
  101. html
  102. <form class="form_com" action="{% url 'like_comment' comment.pk %}" method="post">
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement