Django 按主页中最高点赞数排序

Django order by highest number of likes in homepage

我正在尝试创建一个页面,让人们可以在主页上看到评分最高的文章,但我不知道如何使用喜欢来实现这一点。

我的post模特

class Post(models.Model):
    title = models.CharField(max_length=225)
    post_image = models.ImageField(null=True, blank=True,  upload_to="images/")
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    body = models.TextField()
    post_date = models.DateField(auto_now_add=True)
    likes = models.ManyToManyField(User, related_name='blog_posts')

    def total_likes(self):
        return self.likes.count()

    def __str__(self):
        return self.title + ' | '  + str(self.author)

    def get_absolute_url(self):
        return reverse('post-detail', args=(str(self.id)),)

我的views.py

def LikeView(request, pk):
    post = get_object_or_404(Post, id=request.POST.get('post_id'))
    liked = False
    if post.likes.filter(id=request.user.id).exists():
        post.likes.remove(request.user)
        liked = False
    else:
        post.likes.add(request.user)
        liked = True

    return HttpResponseRedirect(reverse('post-detail', args=[str(pk)]))

class HomeView(ListView):
    model = Post
    template_name = 'home.html'
   


class PostDetail(DetailView):
    model = Post
    template_name = 'post_detail.html'

    def get_context_data(self, *args, **kwargs):
        context = super(PostDetail, self).get_context_data()
        current_post = get_object_or_404(Post, id=self.kwargs['pk'])
        total_likes = current_post.total_likes()

        liked = False
        if current_post.likes.filter(id=self.request.user.id).exists():
            liked = True 


        context['total_likes'] = total_likes
        context['liked'] = liked 
        return context                    
    

提前致谢! ..................................................... ...................................................

你的 HomeView 将是:

class HomeView(ListView):
    queryset = Post.objects.annotate(like_count=Count('likes')).order_by('-like_count')
    template_name = 'home.html'
    context_object_name = 'post_list' # Providing a useful context_object_name is always a good idea

在您的模板中:

{% for post in post_list %}