Фильтр Django QuerySet + order_by + предел

Таким образом, у меня есть приложение 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

Но, если возможно, я хотел бы остаться в ORM Django. Главным образом это просто беспокоит меня, что я, может казаться, не использую order_by с фильтром и пределом. Какие-либо идеи?

5
задан bjudson 15 June 2010 в 17:36
поделиться

1 ответ

Ваш синтаксис фрагмента неверен. Значение после двоеточия - это не количество элементов, которые нужно получить, а индекс конца среза. Использование «медианы» само по себе без двоеточия, как вы это делаете во втором примере, будет работать.

5
ответ дан 14 December 2019 в 18:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: