2010-06-15 13 views
5

Quindi ho un'applicazione Django che elabora i risultati dei test e sto cercando di trovare il punteggio medio per una determinata valutazione. Penserei che questo funzionerebbe:Django Query Filtro set + order_by + limit

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 

Ma restituisce sempre una lista vuota. Posso ottenere il risultato che voglio con questo:

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 

Vorrei solo preferirei non dover interrogare l'intero set di esami. Ho pensato di scrivere solo una query MySQL grezzo che sembra qualcosa di simile:

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

Ma, se possibile, mi piacerebbe rimanere all'interno ORM di Django. Per lo più mi preoccupa solo che non riesco a usare order_by con un filtro e un limite. Qualche idea?

risposta

5

La sintassi della sezione è errata. Il valore dopo i due punti non è il numero di elementi da ottenere, ma l'indice della fine della sezione. Usare "mediana" da solo senza due punti, come nel secondo esempio, funzionerebbe.

+0

Grazie, stavo ottenendo la sintassi della sezione mista con la sintassi del limite MySQL – bjudson