我有一个使用此 python 函数创建的对象“帖子”列表,我需要按时间戳属性对该列表进行排序。def following(request): posts=[] follows=Follow.objects.all() for follow in follows: if follow.follower==request.user: posts_user=Post.objects.filter(user=follow.user) for post in posts_user: posts.append(post) return render(request, "network/following.html",{ "posts":posts })如果这是一个 QuerySet,我将使用此函数进行排序:posts = posts.order_by("-timestamp").all()但这是一个列表,所以我不能使用这个函数,它给了我这个错误:'list' object has no attribute 'order_by'如何按时间戳对此列表进行排序,以便最新的帖子位于第一个?这是 models.py 中的 Post 类class Post(models.Model): user = models.ForeignKey("User", on_delete=models.CASCADE, related_name="user_post") text=models.TextField(blank=True) timestamp = models.DateTimeField(auto_now_add=True) likes=models.IntegerField(default=0)我的想法是将列表转换为查询集,但我不知道该怎么做。谢谢你!
1 回答
PIPIONE
TA贡献1829条经验 获得超9个赞
您可以使用__in
字段查找来过滤您的帖子,然后对该查询集进行排序。就像是:
Post.objects.filter(
user__in=Follow.objects.filter(
follower=request.user
).values_list('user')
).order_by("-timestamp")
我们首先构建一个查询集来过滤所有等于当前用户( )Follow的对象。接下来,我们通过调用来获取所有这些过滤对象上的所有对象。我们传递此查询集来过滤属性位于此查询集中的对象。然后我们只需按时间戳排序即可。followerrequest.userFollow.userFollowvalues_listPostuser
添加回答
举报
0/150
提交
取消