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