Получение имен всех пользователей, которым понравился пост в django

#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 %}