如何使用Django的ORM加入子表?

时间:2017-12-09 23:28:39

标签: django postgresql orm

我有这个查询。订单根据帖子的最后评论发布记录。此查询适用于小表。但是,我在评论表上填充了大约2M行的随机数据数据库。使用explain分析查询并看到在Post表上执行顺序扫描。

select
p.*,
t.last_update
from 
post_post p
join
( select c.post_id as pid, max(c.create_date) as last_update from comment_comment c group by pid) t
on p.id = t.pid
order by t.last_update desc
limit 50;

我重写了比当前查询更快的同一查询。但我找不到一种方法来适应django的orm上的查询。我该如何重写呢?如果可能的话,我想尽可能不使用原始查询来编写它。

的问候。谢谢你的帮助。

name.lower() == show:

1 个答案:

答案 0 :(得分:0)

如果我对你的Django模型做出一些假设,它将看起来像这样:

posts.objects
   .annotate(last_update=Max('comments__create_date'))
   .order_by('-last_update')[:50]

在Django中,annotate是你的朋友。