2010-06-15 39 views
5

Vì vậy, tôi có một ứng dụng Django xử lý kết quả kiểm tra và tôi đang cố gắng tìm điểm số trung bình cho một đánh giá nhất định. Tôi nghĩ rằng điều này sẽ hoạt động:Bộ lọc Django QuerySet + 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 

Nhưng nó luôn trả về một danh sách trống. Tôi có thể nhận được kết quả tôi muốn với điều này:

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 

Tôi chỉ muốn không phải truy vấn toàn bộ các bài kiểm tra. Tôi đã nghĩ về việc chỉ cần viết một truy vấn MySQL thô trông như sau:

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

Nhưng nếu có thể, tôi muốn ở trong ORM của Django. Chủ yếu, nó chỉ làm phiền tôi rằng tôi dường như không thể sử dụng order_by với một bộ lọc và một giới hạn. Ý tưởng nào?

Trả lời

5

Cú pháp slice của bạn sai. Giá trị sau dấu hai chấm không phải là số lượng các phần tử cần có, mà là chỉ mục của phần cuối của slice. Sử dụng 'trung bình' một mình mà không có dấu hai chấm, như bạn làm trong ví dụ thứ hai, sẽ hoạt động.

+0

Cảm ơn, tôi đã nhận được cú pháp slice được trộn lẫn với cú pháp giới hạn MySQL – bjudson

Các vấn đề liên quan