ユーザのステータスに基づいてWebAPIのページ番号を設定しようとしています。ユーザis_anonymous
の場合、クエリパラメータでページサイズを設定できません。私は1つのビュークラスでこれをしようとします。私は2つの異なるビュークラスでそれを行うことができ、そのうちの1つにアクセスを制限することができましたが、これは良い解決策ではないと思います。django rest frameworkでユーザタイプに基づいたページネーションを変更する
ビュークラス:
class WeathermList(generics.ListAPIView):
queryset = WeatherMeasurements.objects.all()
serializer_class = WeatherMeasurementsSer
filter_backends = (filters.DjangoFilterBackend, filters.OrderingFilter,)
filter_class = WeatherMeasurementsFilter
ordering_fields = ('measure_datetime',)
ordering = ('measure_datetime',)
@property
def paginator(self):
"""
The paginator instance associated with the view, or `None`.
"""
if not hasattr(self, '_paginator'):
# import ipdb
# ipdb.set_trace()
if self.request.user.is_anonymous:
self._paginator = AnonymousPaginator
else:
self._paginator = RegisteredPaginator
return self._paginator
ページネーションクラス:
class RegisteredPaginator(PageNumberPagination):
page_size = 288
page_size_query_param = 'page_size'
max_page_size = 10000
class AnonymousPaginator(PageNumberPagination):
page_size = 288
エラーメッセージ:
File ".../env/lib/python3.5/site-packages/rest_framework/generics.py", line 172, in paginate_queryset
return self.paginator.paginate_queryset(queryset, self.request, view=self)
TypeError: paginate_queryset() missing 1 required positional argument: 'request'
property paginator
はもともとクラスGenericAPIViewで宣言されています。私はそれを正しく再実装するかどうかはわかりません。両方のカスタムページネーションクラスが設定されているときに動作していますpagination_class
この作業を行うための助けがあれば幸いです。
ああ私の神、どのように恥ずかしい。どうもありがとうございました!このような改ページを使用することをお勧めしますか? –
@ChristianRappうん、それはそれを行う最善の方法です。実際には、私はこの質問のほんの数時間前にそのアプローチを推奨しました:http://stackoverflow.com/questions/38988272/django-rest-framework-drf-how-to-set-pagination-class-depending-on-query -param/38989390#38989390 – levi