如何获取django查询集中的下n条记录?

时间:2017-04-25 23:46:26

标签: python django

有没有办法在django queryset中获取下n条记录?

例如,在获得前五个记录后,如何获得接下来的5条记录?我的用例是我在页面上看到更多按钮,并且只要看到更多按钮(通过ajax),我就想加载接下来的5条记录

我想做这样的事情

#function that handles ajax
def load_next_five(initial_five)
    next_five = initial_five.???
    return JsonResponse({'next_five': list(next_five)})

def main_view(request):
    initial_five = Car.objects.filter(year__gte=2000)
    ...

我如何处理load_next_five函数?

2 个答案:

答案 0 :(得分:1)

使用切片。你必须传入你想要开始的地方。

def load_next_five(start)
    next_five = Car.objects.filter(year__gte=2000)[start:start+5]
    return JsonResponse({'next_five': list(next_five)})

def main_view(request):
    initial_five = Car.objects.filter(year__gte=2000)[:5]

在幕后,Django会将其转换为限制数据库端结果的子句(例如,LIMIT和OFFSET)。

答案 1 :(得分:0)

关注django paginator,易于使用。

def load_next_five(request):
    car_obj = Car.objects.all()
    paginator = Paginator(car_obj, 5) # change this number as you required
    page = request.GET.get('page')

    try:
        cars = paginator.page(page)
    except PageNotAnInteger:
        cars = paginator.page(1)
    except EmptyPage:
        cars = paginator.page(paginator.num_pages)

    return JsonResponse({'cars': cars})