我正在尝试实现一个自定义视图,其中帖子在最新和投票最多的地方交替显示:
| post | vote_score | created_at |
====================================
| A | 20 | 01/01/2020 | ---> Top voted
| F | 0 | 05/01/2020 | ---> Newest
| I | 19 | 02/01/2020 | ---> Second to Top Voted
| B | 2 | 04/01/2020 | ---> Second to Newest
我知道我只可以运行2个查询,一个按vote_score
排序,另一个按created_at
排序,然后在Python中插入行。我想知道数据库中是否有一种更有效的方法来执行此操作,这样我就不必检索整个表,因此可以在查询中使用LIMIT
和OFFSET
来支持简单分页。
我在玩annotate
,Window()
和RowNumber()
,但我无法使其正常工作:
qs.annotate(row_number=Window(
expression=RowNumber()*2,
order_by=F('created_at').desc())
).annotate(row_number=Window(
expression=RowNumber()*2+1,
order_by=F('vote_score').desc())
).order_by('row_number')