2015-08-08 94 views
1

我有一個模型有兩個屬性:日期和長度和其他不相關的。我需要在模板中顯示每天的長度總和列表。Django聚合多天

到目前爲止,我所使用的解決方案是由天循環白天和創建使用聚合一樣總和的名單:

for day in month: 
    sums.append(MyModel.objects.filter(date=date).aggregate(Sum('length'))) 

但似乎因爲DB查詢的數量很無效的給我。沒有更好的方法來做到這一點?像緩存一切,然後過濾它,而不觸及數據庫?

回答

2

.values()可以通過date用來組,這樣你纔會有length字段的總和通過.annotate()得到獨特日期一起:

>>> from django.db.models import Sum 
>>> MyModel.objects.values('date').annotate(total_length=Sum('length')) 

docs

.values()子句用於約束結果集中返回的列,評估方法註釋略有不同。原始結果不是針對原始QuerySet中的每個結果返回註釋結果,而是根據.values()子句中指定的字段的唯一組合來分組。

希望這會有所幫助。

+0

謝謝,那正是我想要的。 – Dalbenn

+0

可以用這個型號的外鍵的外鍵分組嗎?我試圖做'values('first_fk__second_fk')',但它仍然被'first_fk'分割。 – Dalbenn