我有一個記錄集,看起來像這樣(多餘的數據忽略,以保護容易厭煩):Can Django的.annotate()可以返回對象嗎?
id | user_id | created | units
----+---------+-------------------------------+-------
1 | 1 | 2011-04-18 15:43:02.737063+00 | 20
2 | 1 | 2011-04-18 15:43:02.737063+00 | 4
3 | 1 | 2011-04-18 15:46:48.592999+00 | -1
4 | 1 | 2011-04-19 12:02:10.687587+00 | -1
5 | 1 | 2011-04-19 12:09:20.039543+00 | -1
6 | 1 | 2011-04-19 12:11:21.948494+00 | -1
7 | 1 | 2011-04-19 12:15:51.544394+00 | -1
8 | 1 | 2011-04-19 12:16:44.623655+00 | -1
而且我想獲得的結果,看起來像這樣:
id | user_id | created | units
----+---------+-------------------------------+-------
8 | 1 | 2011-04-19 12:16:44.623655+00 | 14
2 | 1 | 2011-04-18 15:43:02.737063+00 | 4
所以我很自然地看向.annotate()
:
u = User.objects.get(pk=1)
(MyModel.objects.filter(user=u)
.values("id","user","created")
.annotate(stuff=Sum("units"))
)
的問題是,我想對象,不是一個單一的字典列表。我需要附加到這些對象的方法才能使用。任何想法如何做到這一點?
編輯: 我應該指出,我嘗試使用.values(),因爲沒有它,我會得到一堆標註對象的還好,但會有其中8個(如在第一次查詢以上) ,而不是2(如上面的第二個結果)。我的猜測是因爲有一個時間戳它沒有結合排在那裏做行不同:
MyModel.objects.filter(user=u).annotate(Sum("units"))
# Returns 8 records, not 2 as expected
對於問題的第二部分,註釋,我m沒有看到第一組數據如何導致第二組數據... 爲什麼ids 8和2剩下的總數是14和4? 註釋不會減少返回的行數。 也許,如果你添加了SQL,你正在嘗試查看 – Chris 2011-04-20 09:01:34
什麼是你用於生成結果表(2行)上面顯示的正常sql查詢 – 2011-04-20 12:43:15