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

我有一个使用此 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)

我的想法是将列表转换为查询集,但我不知道该怎么做。谢谢你!


手掌心
浏览 64回答 1
1回答

PIPIONE

您可以使用__in 字段查找来过滤您的帖子,然后对该查询集进行排序。就像是:Post.objects.filter(    user__in=Follow.objects.filter(        follower=request.user    ).values_list('user')).order_by("-timestamp")我们首先构建一个查询集来过滤所有等于当前用户( )Follow的对象。接下来,我们通过调用来获取所有这些过滤对象上的所有对象。我们传递此查询集来过滤属性位于此查询集中的对象。然后我们只需按时间戳排序即可。followerrequest.userFollow.userFollowvalues_listPostuser
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python