[英]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.