构造一个命令内部联接的django查询集

时间:2011-02-21 05:50:55

标签: sql django inner-join django-queryset

我正在尝试在基于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 queryset API构建它?

我将非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

Page.objects.filter(pageview__user = request.user).order_by('pageview__date')

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