来自不同order_by()子句的查询集的替代行

时间:2020-05-02 01:39:46

标签: django postgresql django-models django-queryset

我正在尝试实现一个自定义视图,其中帖子在最新和投票最多的地方交替显示:

| 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中插入行。我想知道数据库中是否有一种更有效的方法来执行此操作,这样我就不必检索整个表,因此可以在查询中使用LIMITOFFSET来支持简单分页。

我在玩annotateWindow()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')

0 个答案:

没有答案
相关问题