使用order_by()与查询分开

时间:2019-01-20 08:32:23

标签: python django sorting logic

我正在如下所示的for循环中使用order_by检索一些帖子

logged_user = Profile.objects.get(user=request.user.id)
followings = logged_user.follows.all()
all_posts = []
for foll in followings:
        all_posts += Posts.objects.all().filter(user_profile=foll.id).order_by('trending_ratio')

它为每个用户对帖子进行排序,但是我想根据他们的trending ratio对所有帖子进行排序。例如,上面的代码根据user1的所有tending_ratio对user1的所有帖子进行排序,然后根据trending_ratio对user2的所有帖子进行排序,依此类推。

但是,我只是想在所有用户的所有帖子都存储在all_posts中之后执行排序,即 all_posts.order_by('trending_ratio')在我的for循环执行之后

注意: 1.我遵循“帖子”模型中的ManyToMany字段。 2.以下是已登录用户关注的所有用户的列表 models.py

class Posts(models.Model):
    user_profile = models.ForeignKey(Profile, on_delete=models.CASCADE)
    trending_ratio = models.FloatField(default=1)
    ...

1 个答案:

答案 0 :(得分:1)

您可以在一个查询中获取所有帖子:

all_posts = Posts.objects.filter(user_profile__in=followings).order_by('trending_ratio')

这将正确地排列它们,并且效率更高。