Djangoにて、Viewで大量のデータを一度に持ってくるのではなく、必要な分だけ持ってきたい

Djangoの初心者です。
大量のデータ(1つのテーブルは30万件、もう一つは、1000万件超)があり、Viewで一覧表示をしたいと考えています。

現在は、以下のような形で、全部を持ってきてから、Viewに渡すような書き方をしています。

class BlogLists(View): def get(self, request): ctx = {} object_list = Blog.objects.all() ★ ctx['object_list'] = object_list return render(request, 'pachi/blog_list.html', ctx)

さすがにこれだとダメなので、Paginatorを入れて、50行ずつ表示するような形にしています。

paginator = Paginator(object_list, 50) page = request.GET.get('page', 1) try: page_obj = paginator.page(page) except PageNotAnInteger: page_obj = paginator.page(1) except EmptyPage: page_obj = paginator.page(paginator.num_pages)

しかし、この形でも、★の部分の、all()は、変わらないため、最初のアクセス時に、それぞれ大量のデータを持ってくるために、時間が掛かってしまいます。

こちらに対して、皆様は、どのように解決されているのでしょうか?
私としては、初期ページには、50行あればよいので、50行の表示をしたいと思っていますが、
ページネーションしたときに、次の50行や前の50行を持ってくるような場合は、皆さん、
パラメータで渡して、解釈しながら、フィルターかけている感じでしょうか?

意図が伝わるか、大変心配ですが、ご興味を持っていただいた方で、ご不明点がございましたら、ご連絡ください。

コメントを投稿

0 コメント