5

テスト結果を処理する Django アプリがあり、特定の評価の中央値を見つけようとしています。私はこれがうまくいくと思います:

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 を使用できないように見えるのは、私を悩ませているだけです。何か案は?

4

1 に答える 1

5

スライス構文が間違っています。コロンの後の値は、取得する要素の数ではなく、スライスの終わりのインデックスです。2番目の例のように、コロンなしで「中央値」を単独で使用すると機能します。

于 2010-06-15T17:50:43.200 に答える