为了账号安全,请及时绑定邮箱和手机立即绑定

Python(Django)如何按时间戳属性对对象列表进行排序

Python(Django)如何按时间戳属性对对象列表进行排序

手掌心 2023-10-25 10:50:36
我有一个使用此 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


查看完整回答
反对 回复 2023-10-25
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信