代码之家  ›  专栏  ›  技术社区  ›  bjudson

Django QuerySet筛选器+order\u by+limit

  •  5
  • bjudson  · 技术社区  · 15 年前

    所以我有一个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
    

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

    1 回复  |  直到 15 年前
        1
  •  5
  •   Daniel Roseman    15 年前

    切片语法错误。冒号后面的值不是要获取的元素的计数,而是切片末尾的索引。在没有冒号的情况下单独使用“median”,就像您在第二个示例中所做的那样,是可行的。