Django查询优化:获取第一个和最新的结果

时间:2017-03-28 04:47:36

标签: python django django-queryset

我有一个Report模型,其中包含创建日期。我想根据创建的日期获取第一个和最新的报告。例如,如果我们有以下带有创建日期的报告

    R1 (2017-02-01)
    R2 (2017-01-02)
    R3 (2017-03-01)
    R4 (2017-01-31)
    R5 (2016-01-01)
    R6 (2017-03-04)

如果count = 5,预期结果应为[R5,R4,R1,R3,R6]

如果count = 3,预期结果应为[R5,R3,R6]

这是我提出的解决方案。

def get_reports(client, count=5):
    first = list(Report.objects.filter(client=client).order_by('created')[:1])
    rest = list(Report.objects.filter(client=client).order_by('-created')[:count - 1])
    rest.reverse()
    if first and first[0] in rest:
        return rest
    else:
        return first + rest

它有效,但想知道是否有更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:2)

我认为你只能做一个查询:

qset = Report.objects.filter(client=client).order_by('-created')
first = [ qset.last() ] 
rest = list(qset[:count - 1])
相关问题