2015-06-25 65 views
0

我有一個Django的模型,看起來像這樣(我修剪爲簡潔一些細節):無法在Django查詢組和值

class Resource(models.Model): 
    role = models.ForeignKey('Role') 
    project = models.ForeignKey('Project') 
    start_date = models.DateField 
    percentage = models.DecimalField 

我有一幫行此表與各種percentage值,我想總結他們每個獨特的start_date。在手工數據庫玩,我發現SQL要做到這一點:

SELECT start_date, SUM(percentage) AS "total" 
FROM myapp_Resource 
GROUP BY start_date 

當我嘗試使用Django的機制來獲得類似的查詢,我必然會得到錯誤的事情。我認爲下面的代碼會給我什麼,我想:

Resource.objects.values('start_date').annotate(total = Sum('percentage')) 

不幸的是,它返回下面的查詢:

SELECT start_date, SUM(percentage) AS "total" 
FROM myapp_resource 
INNER JOIN myapp_role ON (myapp_resource.role_id = myapp_role.id) 
GROUP BY start_date, myapp_role.name 
ORDER BY myapp_role.name ASC 

這哪裏是內部聯接來了呢?我沒有明確表示有加入;我對這一專欄甚至沒有興趣!我的ForeignKeys是否會以某種方式咬我?我嘗試了annotate的變體,但無濟於事。任何指針將不勝感激。

+0

它的按部分順序導致內部連接...你需要追蹤是什麼導致該子句被添加 – Anentropic

+0

你有'Resource.Meta'這樣的東西http://stackoverflow.com/a/7497149/ 202168? – Anentropic

回答

1

清除查詢中的任何排序明確:

Resource.objects.values('start_date').annotate(total=Sum('percentage')).order_by() 

請參閱here上的默認排序的干擾更多信息(如您@Anentropic上面得到的評論中提及)

+0

就是這樣!我沒有意識到默認排序是什麼讓我咬人。謝謝你的提示! –