Django与参数的聚合

时间:2017-09-01 20:55:50

标签: django postgresql orm

我的任务是 - 我希望每个object1获得最新object2 creation date。但首先我想应用一些过滤器: Orm查询:

    Object2.objects.filter(status='fail').annotate(max_date=
Max('object1__object2__created')).filter(created=F('max_date')

如果最后一次创建object2 fail status,它的工作正常 - 但如果它有其他状态 - 我没有得到这个对象的结果,因为Max查看所有对象而不仅仅{ {1}}如果最新的对象有另一个status='fail' - 我没有得到任何结果status

当我查看它生成的sql查询时,我发现它不会在object1中通过Max过滤掉所有相关对象的对象 - 这是实现我想要的方法吗?我可以以某种方式将查询传递给Max?

SQL:

status='fail'

而不是 SELECT ...., MAX(T3."created") AS "max_date" FROM "object2" INNER JOIN "object1" ON ( "object2"."object1_id" = "object1"."id" ) LEFT OUTER JOIN "object2" T3 ON ( "object1"."id" = T3."object1_id" ) WHERE "object2"."status" = fail GROUP BY ... HAVING "object2"."created" = (MAX(T3."created"))

我想要LEFT OUTER JOIN "object2" T3 ON ( "object1"."id" = T3."object1_id" )之类的东西 我怎样才能做到这一点?

0 个答案:

没有答案