我使用的是django 2,在我的列表视图中,我想通过likecount和datetime字段来编辑查询集。主要目的是为了显示今天最喜欢的帖子。比如,我想显示今天最喜欢的帖子。就像今天的前10个帖子(最喜欢的)。.我试过很多方法,但都想不通。希望你们能帮助我。
我的models.py。
class post(models.Model):
parent = models.ForeignKey("self", on_delete=models.CASCADE, blank=True, null=True)
title = models.CharField(max_length=100)
image = models.ImageField(upload_to='post_pics', null=True, blank=True)
content = models.TextField()
likes = models.ManyToManyField(User, related_name='likes', blank=True)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
restrict_comments = models.BooleanField(default=False)
watchlist = models.ManyToManyField(User, related_name='watchlist', blank=True)
def __str__(self):
return self.content
class Meta:
ordering = ['-date_posted', 'title']
def get_absolute_url(self):
return reverse ('blog-home')
def total_likes(self):
return self.likes.count()
我的views.py:
@login_required
def most_likes(request):
posts = post.objects.annotate(like_count=Count('likes')).order_by('-like_count', '-date_posted')
context = {'posts': posts}
return render(request, 'blog/most_likes.html', context)
如果我没理解错的话,你已经按照你想要的字段来排列查询集了 (like_count
和 date_posted
),但你仍然缺少了只获取所需时间段的结果的部分。
如果是这种情况,那么你缺少的是过滤查询集。你需要这样的东西(获取过去10天的帖子,按日期和点赞数排序)。
import datetime as dt
@login_required
def most_likes(request):
delta = dt.timedelta(days=10)
posts = post.objects.filter(date_posted__gt=(dt.datetime.now() - delta)) \
.annotate(like_count=Count('likes')).order_by('-like_count', '-date_posted')
context = {'posts': posts}
return render(request, 'blog/most_likes.html', context)
现在,我会试着把想要过滤数据的时间段的值 作为一个查询参数,所以我可以做如下的事情:
delta = dt.timedelta(days=request.GET.get('days'))