Таким образом, у меня есть приложение 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 с фильтром и пределом. Какие-либо идеи?
Ваш синтаксис фрагмента неверен. Значение после двоеточия - это не количество элементов, которые нужно получить, а индекс конца среза. Использование «медианы» само по себе без двоеточия, как вы это делаете во втором примере, будет работать.