#python #django
#python #django
Вопрос:
Я пытаюсь показать список пользователей, которым понравился конкретный пост. Вот что я пробовал, но ничего не показывает.
Я создал post_likes в views.py и попытался перебрать своих пользователей в post-details.html:
Вот post_detail.html шаблон:
{% for user in post_likes %}
<p>{{ user.username }}f</p>
{% endfor %}
но ничего не отображается.
Вот сообщение Models.py:
class Post(models.Model):
content = RichTextUploadingField(null=True, blank=True)
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='author')
likes = models.ManyToManyField(User, related_name='liked', blank=True)
Вот такие model.py:
class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
value = models.CharField(choices=LIKE_CHOICES, default='Like', max_length=8)
Вот views.py:
class PostDetailView(DetailView):
model = Post
template_name = "blog/post_detail.html" # <app>/<model>_<viewtype>.html
def get_context_data(self, *args, **kwargs):
context = super(PostDetailView, self).get_context_data()
post = get_object_or_404(Post, slug=self.kwargs['slug'])
comments = Comment.objects.filter(
post=post).order_by('-id')
total_likes = post.total_likes()
liked = False
if post.likes.filter(id=self.request.user.id).exists():
liked = True
if self.request.method == 'POST':
comment_form = CommentForm(self.request.POST or None)
--------Comment Related Lines--------------------------------
else:
comment_form = CommentForm()
context["comments"] = comments
context["comment_form"] = comment_form
context["total_likes"] = total_likes
context["liked"] = liked
return context
def get(self, request, *args, **kwargs):
res = super().get(request, *args, **kwargs)
self.object.incrementViewCount()
if self.request.is_ajax():
context = self.get_context_data(self, *args, **kwargs)
html = render_to_string('blog/comments.html', context, request=self.request)
return JsonResponse({'form': html})
return res
def LikeView(request):
post = get_object_or_404(Post, id=request.POST.get('id'))
liked = False
current_likes = post.num_likes
user = request.user
if post.author.id == request.user.id:
messages.warning(request, 'You can not like you own Post')
else:
if post.likes.filter(id=request.user.id).exists():
post.likes.remove(request.user)
liked = False
current_likes = current_likes - 1
else:
post.likes.add(request.user)
liked = True
current_likes = current_likes 1
post.num_likes = current_likes
post.save()
like, created = Like.objects.get_or_create(user=user, post=post)
if not created:
if like.value == 'Like':
like.value = 'Unlike'
else:
like.value = 'Like'
like.save()
context = {
'total_likes': post.total_likes,
'liked': liked,
'post': post
}
if request.is_ajax:
html = render_to_string('blog/like_section.html', context, request=request)
return JsonResponse({'form': html})
def post_likes(request, self):
posts = get_object_or_404(Post, slug=self.kwargs['slug'])
post_likes = posts.likes.all()
context = {'post_likes': post_likes, }
return render(request, 'blog/post_detail.html', context)
мой вопрос:
Как я могу увидеть имена пользователей, которым понравился конкретный пост?
Комментарии:
1. вы пробовали печатать
post_likes = posts.likes.all()
?2. @Alvi15 ничего не напечатано
3. если оно пустое, то проблема заключается здесь
posts = get_object_or_404(Post, slug=self.kwargs['slug'])
Ответ №1:
В вашем шаблоне замените
{% for user in post_likes %}
<p>{{ user.username }}f</p>
{% endfor %}
с
{ % for like in post_likes %}
<p> {{ like.user.username }} </p>
{ % endfor %}