我々は車輪の再発明する必要なしに解決策を見つけることができます。
のはgenerics
ページネーションを実装する方法について見てみましょう: django-rest-framework/rest_framework/generics.py。
これはまさに私たちの見解にも使われる予定です!
settings.py
:
は、我々は、以下のようなグローバル改ページを設定していると仮定しましょう
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS':
'rest_framework.pagination.DESIRED_PAGINATION_STYLE',
'PAGE_SIZE': 100
}
たちのビュー/ビューセットのコードを膨張させないために、我々は店にカスタムミックスインを作成することができます私たちの改ページコード:views.py
に続いて
class MyPaginationMixin(object):
@property
def paginator(self):
"""
The paginator instance associated with the view, or `None`.
"""
if not hasattr(self, '_paginator'):
if self.pagination_class is None:
self._paginator = None
else:
self._paginator = self.pagination_class()
return self._paginator
def paginate_queryset(self, queryset):
"""
Return a single page of results, or `None` if pagination
is disabled.
"""
if self.paginator is None:
return None
return self.paginator.paginate_queryset(
queryset, self.request, view=self)
def get_paginated_response(self, data):
"""
Return a paginated style `Response` object for the given
output data.
"""
assert self.paginator is not None
return self.paginator.get_paginated_response(data)
:
from rest_framework.settings import api_settings
from rest_framework.views import APIView
from my_app.mixins import MyPaginationMixin
class MyView(APIView, MyPaginationMixin):
queryset = OurModel.objects.all()
serializer_class = OurModelSerializer
pagination_class = api_settings.DEFAULT_PAGINATION_CLASS
# We need to override the get method to insert pagination
def get(self, request):
...
page = self.paginate_queryset(self.queryset)
if page is not None:
serializer = self.serializer_class(page, many=True)
return self.get_paginated_response(serializer.data)
そして今、我々は、ページネーションとAPIView
を持っています。
'NoneType'オブジェクトには属性 'paginate_queryset'がありません。このエラーが発生しました – Thameem
@Thameemあなたが行ったことを見るためのコードなしであなたを手助けするのは少し難しいです...問題が解決しない場合は、ここで質問をすることを検討してください。 –
あなたのメッセージのための@thanks私はこの応答を逃したreturn self.get_paginated_response(serializer.data)。ありがとう。その今働いて – Thameem