Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- model
- class Post(models.Model):
- title = models.CharField(max_length=100, verbose_name='Заголовок')
- content = models.TextField(verbose_name='Содержание')
- date_posted = models.DateTimeField(default=timezone.now,
- verbose_name='Время', null=True, blank=True)
- author = models.ForeignKey(User, on_delete=models.CASCADE,
- verbose_name='Автор', blank=True)
- likes_post = models.ManyToManyField(User, related_name='likes_post', blank=True)
- def __str__(self):
- return self.title
- def total_likes(self):
- return self.likes_post.count()
- def get_absolute_url(self): #дает возможность сылаться на пост для детаил вью
- return reverse('post-detail', kwargs={'id': self.id})
- class Comment(models.Model):
- user = models.ForeignKey(User, on_delete=models.CASCADE)
- post = models.ForeignKey(Post, on_delete=models.CASCADE)
- content = models.TextField(max_length=100000, verbose_name='')
- timestamp = models.DateTimeField(auto_now_add=True,
- verbose_name='Время', null=True, blank=True)
- reply = models.ForeignKey('Comment', on_delete=models.CASCADE, null=True, blank=True, related_name='replies')
- likes = models.ManyToManyField(User, related_name='likes', blank=True)
- class Meta:
- ordering = ['-timestamp']
- def __str__(self):
- return '{}'.format(self.content)
- def total_likes_com(self):
- return self.likes.count()
- def like_comment(request, pk):
- comment = get_object_or_404(Comment, id=request.POST.get('comment_id'))
- liked_com = False
- if comment.likes.filter(id=request.user.id).exists():
- comment.likes.remove(request.user)
- liked_com = False
- else:
- comment.likes.add(request.user)
- liked_com = True
- return HttpResponseRedirect(reverse('post-detail', args=[str(pk)]))
- def like_post(request, pk):
- post = get_object_or_404(Post, id=request.POST.get('post_id'))
- liked = False
- if post.likes_post.filter(id=request.user.id).exists():
- post.likes_post.remove(request.user)
- liked = False
- else:
- post.likes_post.add(request.user)
- liked = True
- return HttpResponseRedirect(reverse('post-detail', args=[str(pk)]))
- view
- class PostDetailView(FormMixin,DetailView):
- model = Post
- template_name = 'post/post_detail.html'
- form_class = CommentForm
- paginate_by = 2
- def get_success_url(self):
- return reverse('post-detail', kwargs={'pk': self.object.id})
- def get_context_data(self, **kwargs):
- context = super(PostDetailView, self).get_context_data(**kwargs)
- context['comments'] = Comment.objects.filter(post=self.object)
- context['form_comment'] = CommentForm(initial={'post': self.object})
- stuff = get_object_or_404(Post, id=self.kwargs['pk'])
- total_likes = stuff.total_likes()
- liked = False
- if stuff.likes_post.filter(id=self.request.user.id).exists():
- liked = True
- context['total_likes'] = total_likes
- context['liked'] = liked
- stuff_comment = get_object_or_404(Comment, id=self.kwargs['pk'])
- total_likes_com = stuff_comment.total_likes_com()
- liked_com = False
- if stuff_comment.likes.filter(id=self.request.user.id).exists():
- liked_com = True
- context['total_likes_com'] = total_likes_com
- context['liked_com'] = liked_com
- return context
- url
- path('like_comment/<int:pk>', like_comment, name='like_comment'),
- path('like_post/<int:pk>', like_post, name='like_post'),
- html
- <form class="form_com" action="{% url 'like_comment' comment.pk %}" method="post">
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement