Фильтр Django QuerySet + order_by + limit - PullRequest
5 голосов
/ 15 июня 2010

Итак, у меня есть приложение 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 с фильтром и лимитом.Есть идеи?

1 Ответ

5 голосов
/ 15 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...