2017-04-25 12 views
0

djangoクエリーセットで次のn個のレコードを取得する方法はありますか?djangoクエリーセットで次のn個のレコードを取得するには?

たとえば、最初の5つのレコードを取得した後、次の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

ページ番号を確認してください。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}) 
関連する問題