【问题标题】:Construct a django queryset that orders an inner join构造一个 django 查询集,用于对内部连接进行排序
【发布时间】:2011-07-01 01:44:07
【问题描述】:

我正在尝试跟踪基于 django 的网站中的页面浏览量。我有以下型号

class PageView:
   date = DateTimeField( auto_now=True )
   user = ForeignKey( User )
   page = ForeignKey( Page )

跟踪页面的每次查看。我想构建一个查询集,该查询集返回用户最近查看的页面,按查看每个页面的日期排序。例如,如果我有以下页面浏览量:

date        | user_id | page_id | 
2011-02-20  |       5 |       2 |
2011-02-19  |       5 |       1 |
2011-02-24  |       5 |       1 |
2011-02-23  |       5 |       2 |

我希望查询集返回

date        | page_id |  title    | and everything associated with the page
2011-02-24  |       1 |  "page 1" |
2011-02-23  |       2 |  "page 2" |

按这个顺序!

在 SQL 中,我可以这样做

SELECT p.*, v.date FROM page p, 
(SELECT page_id, MAX(date) date FROM pageview 
WHERE user_id=5 GROUP BY page_id) AS v where p.id=v.page_id 
ORDER BY v.date;

但是如何使用 django 查询集 API 构建它?

我将非常感谢任何帮助!

【问题讨论】:

    标签: sql django inner-join django-queryset


    【解决方案1】:
    Page.objects.filter(pageview__user = request.user).order_by('pageview__date')
    

    有关 SQL 连接的进一步参考,请参阅 Documentation

    【讨论】:

      猜你喜欢
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 2013-06-26
      • 2018-02-09
      • 2017-10-06
      相关资源
      最近更新 更多