2015-12-13 53 views
0

我嘗試在我的查詢集發現平均,我不能用Avg becouse mark欄可以放置None在一個註釋Django的雙重聚集

所以當我有值2,2,3,無,無,5Avg回報

我的想法是在markSum值,則通過student

這個量除以代碼Sum馬克

student_mark = Mark.objects.filter(id_student__in=student_distinct_filtr_id).values('id_student').annotate(mark=Sum(F('mark'))) 

Count學生

student_amount = Mark.objects.filter(id_student__in=student_distinct_filtr_id).values('id_student').annotate(amount=Count('id_student')) 

我的問題是如何fild平均?

回答

0

我覺得你過於複雜了。爲什麼不計算queryset外部的平均值?

mark_qs = Mark.objects.filter(id_student__in=student_distinct_filtr_id) 
marks = [mark.mark for mark in mark_qs if mark.mark is not None] 
avg = sum(marks)/len(marks) 

無論如何,你的例子是錯誤的。你說 「所以,當我有值2,2,3,無,無,5 Avg回報4」。這是不正確的。它應該是3(如果排除None值)或2(如果您將它們視爲0)。

+0

此代碼返回一個平均的所有標記,爲每個學生 – Damian

+0

你不說,平均應該是每名學生未指定的魅力。無論如何,這應該是很容易:不是使一個列表的所有痕跡,做一個字典,學生作爲重點,並且他的成績爲值列表。然後以相同的方式計算平均值。 –