我正在尝试对投票优先于该日期的帖子列表进行排序。
我有自己的应用程序名为UserPost,我正在使用django投票应用程序进行投票。
class UserPost(models.Model):
user = models.ForeignKey(User)
datetime = models.DateTimeField(auto_now_add=True)
text = models.CharField(max_length=255, blank=True)
is_deleted = models.BooleanField(default=False)
vote = models.ForeignKey(Vote)
现在,我在没有优先选票的情况下进行排序:
posts_list = sorted(posts_list, key=attrgetter('datetime'))
最好的方法是什么?
谢谢!
答案 0 :(得分:2)
元组按字典顺序排序,因此如果你为sorted的key =参数返回一个元组,你可以按投票排序,然后按日期排序:
posts_list = sorted(posts_list, key=lambda post: (Vote.objects.get_score(post)['score'], post.datetime))
或者,您可能还想查看django Model的Meta类中的ordering
选项或django Queryset上的order_by
方法。他们将在一个查询中对数据库进行排序,因此可以更快。或者,您可以尝试使用posts_list.get_score_in_bulk()将查询数量减少到两个(一个用于posts_list,一个用于get_score_in_bulk),如下所示:
scores = Vote.objects.get_score_in_bulk(posts_list)
posts_list = sorted(posts_list, key=lambda post: (scores[post.id]['score'], post.datetime))
答案 1 :(得分:0)
你可以这样排序:
def posts_sorting(post1, post2):
# put here the way you compare posts
pass # return 1 if post2 before post1, -1 otherwise, 0 if they are "equal"
posts_list = sorted(posts_list, cmp=posts_sorting)
其中posts_sorting
是比较帖子的功能。