Django数据库聚合bug

是周一写的一条笔记:

下午搞Django,一直得不到正确结果。看了半天觉得大约是Django的一个bug吧……对queryset做annotate的时候,如果有了太多的inner join,那么annotate的表会被django弄错。比如对一个queryset做annotate(count = Count('records'))的时候,对于同一张表Django的ORM做了两次内联,然后在做Count的时候,是针对的第一次内联的表,而事实上只有对第二次内联才会有效。今天已经头晕了,等空了做一个干净的试验项目重现错误试试。至于重现后么,要么给Django提个ticket,要么自己先看看怎么弄吧。不过从来没有看过这一层的代码,自己弄如果想短期内弄完估计够呛……

昨天创建了一个小项目,重现了这个错误,然后就到Django Trac上提交了一个ticket。谁知,隔会儿上去看状态时就发现已经被close了。原因是和之前的一个ticket重复了。于是顺藤摸瓜跑去观察了一下,结论是,暂时对于多表的聚合问题,要么就“don't do it”,要么就用点别的办法吧。至于1.2会不会解决这个问题么,我暂时就不抱希望了。

Updated 2009-09-27 16:31:

我很感激Django保留了让我直接执行SQL的能力……