有没有办法在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函数?
答案 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})