python - Django 查询集按字段排序
问题描述
我正在使用 django 2,在我的列表视图中,我想通过 likecount 和 datetime 字段对查询集进行排序。主要目标是在今天获得最多赞的帖子。就像,我想显示今天最喜欢的帖子。就像今天的前 10 个帖子(最喜欢)。我尝试了很多方法,但无法弄清楚。我希望你们能帮助我。
我的模型.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()
我的意见.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'))
推荐阅读
- elixir - 您可以将自定义路由助手功能添加到 Phoenix Router.Helpers 吗?
- javascript - 如何使用 React.js 中的 Fetch API 将数据发布到数据库
- python - 在 Python 3 中使用 kwarg errors='ignore' 读取文件是否会在无法读取已编码的内容时跳过字符或整个文件?
- node.js - 是否可以缓存 HTTP OPTIONS 响应?
- linux - 如何强制 malloc 在 64 位系统上返回像指针一样的 32 位?
- python - 函数返回更新值
- python - 使用 Pandas 从具有多个条件的文本文件中导入数据
- javascript - Babel 与 .babelrc 如何修复 MODULE_NOT_FOUND?
- c# - 分配新的 CancellationTokenSource() 是否有任何问题?对一个变量不止一次?
- git - 错误:远程解包失败:完全读取包头之前的 eof