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

Python(Django) how to sort a list of objects by timestamp attribute

我有一个使用 python 函数创建的对象列表 'posts',我需要按时间戳属性对该列表进行排序。

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'

如何按时间戳对列表进行排序,使最新的 post 排在第一位?

这是models.py

中的Postclass
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)

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

您可以使用 __in field lookup 来过滤您的帖子,然后对该查询集进行排序。类似于:

Post.objects.filter(
    user__in=Follow.objects.filter(
        follower=request.user
    ).values_list('user')
).order_by("-timestamp")

我们首先构建一个查询集来过滤所有 Follow 对象,其中 follower 等于当前用户 (request.user)。接下来,我们通过调用 values_list 获得所有过滤的 Follow 对象上的所有 Follow.user 对象。我们将此查询集传递给过滤 Post 对象,其中 user 属性在此查询集中。然后我们只按时间戳排序。