2010-06-15 112 views
5

所以我有一個處理測試結果的Django應用程序,我試圖找到某個評估的中間分數。我會認爲這將工作:Django QuerySet過濾器+ order_by +限制

e = Exam.objects.all() 
total = e.count() 
median = int(round(total/2)) 
median_exam = Exam.objects.filter(assessment=assessment.id).order_by('score')[median:1] 
median_score = median_exam.score 

但它總是返回一個空的列表。我可以得到我想要的結果:

e = Exam.objects.all() 
total = e.count() 
median = int(round(total/2)) 
exams = Exam.objects.filter(assessment=assessment.id).order_by('score') 
median_score = median_exam[median].score 

我只想不必去查詢整套考試。我想寫一個原始的MySQL查詢,看起來像這樣:

SELECT score FROM assess_exam WHERE assessment_id = 5 ORDER BY score LIMIT 690,1 

但如果可能,我想留在Django的ORM。大多數情況下,這只是困擾我,我似乎無法使用order_by與過濾器和限制。有任何想法嗎?

回答

5

您的切片語法錯誤。冒號後的值不是要獲取的元素的數量,而是切片末尾的索引。使用'中位數'而不使用冒號,就像你在第二個例子中那樣使用'中位數'。

+0

謝謝,我得到了與MySQL限制語法混合的切片語法 – bjudson 2010-06-15 18:15:38