2017-04-25 69 views
0

有沒有辦法獲得django queryset中的下n個記錄?如何獲取django queryset中的下n條記錄?

例如,如何在獲得前五條記錄後獲得下5條記錄?我使用的情況是,我有我的網頁上看到更多的按鈕,我想加載下一個5個記錄每當看到更多的按鍵(通過AJAX)

我願做這樣的事情

#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

看看分頁https://docs.djangoproject.com/en/1.11/topics/pagination/。 Django Rest Framework還提供了一些可能對你有用的分頁工具。 – ChidG

回答

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)。

+0

你的石頭!我不知道Django中存在這個功能。你有沒有鏈接到「開始」片的文檔? –

+0

https://docs.djangoproject.com/en/1.11/topics/db/queries//查找「限制查詢集」部分 –

0

按照django分頁器,易於使用。

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})