我的任务是 - 我希望每个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" )
之类的东西
我怎样才能做到这一点?