繁体   English   中英

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

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

我有一个我用这个 python function 创建的对象“帖子”列表,我需要按时间戳属性对这个列表进行排序。

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,我会使用这个 function 进行排序:

posts = posts.order_by("-timestamp").all()

但这是一个列表,所以我不能使用这个 function,它给了我这个错误:

'list' object has no attribute 'order_by'

我怎样才能按时间戳对这个列表进行排序,以便最新的帖子排在第一位?

这是 models.py 中的 Post class

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 字段查找来过滤您的帖子,然后对该查询集进行排序。 就像是:

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对象。 我们传递此查询集以过滤user属性在此查询集中的Post对象。 然后我们只按时间戳排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM