2016-05-18 14 views
0

上のDjangoの残りフレームワークページネーション、これは私のビューセットにある私はビューセットのためのページネーションを達成しようとしています、次GenericViewSetを持ってGenericViewSet

class UserAccountViewSet(viewsets.GenericViewSet, 
         mixins.CreateModelMixin, 
         mixins.UpdateModelMixin, 
         mixins.DestroyModelMixin): 
    queryset = UserAccount.objects.all() 
    lookup_field = 'username' 
    lookup_url_kwarg = "username" 
    serializer_class = UserAccountSerializer 
    page_size = 25 
    page_size_query_param = 'page_size' 
    max_page_size = 1000 

    def list(self, request): 
     queryset = self.queryset 
     if request.GET.dict(): 
      return Response(status=status.HTTP_501_NOT_IMPLEMENTED) 

     serializer = UserListSerializer(queryset, many=True) 
     return Response(serializer.data) 

    def retrieve(self, request, **kwargs): 
     pass 

    def create(self, request, *args, **kwargs): 
     pass 

    def update(self, request, *args, **kwargs): 
     pass 

    def destroy(self, request, *args, **kwargs): 
     pass 

これは私の設定で、

REST_FRAMEWORK = { 
    'DEFAULT_RENDERER_CLASSES': (
     'rest_framework.renderers.JSONRenderer', 
    ), 
    'DEFAULT_THROTTLE_CLASSES': (
     'rest_framework.throttling.AnonRateThrottle', 
     'rest_framework.throttling.UserRateThrottle' 
    ), 
    'DEFAULT_THROTTLE_RATES': { 
     'anon': '100/day', 
     'user': '100/day' 
    } 
} 

ことがありますページを区切らないと、DRFでページ分割の作業を行うにはどうしたらいいですか?

ありがとうございました。

+0

なぜあなただ​​けのパス文で 'list'、' retrieve'などの機能をオーバーライドしていますか?代わりに 'GenericViewSet'の代わりに' ModelViewSet'を使用して、それらの関数をすべて使わずにすべきです。 –

+0

以下のリンクを参照してください、それはあなたを助けることができます。 http://stackoverflow.com/questions/31785966/django-rest-framework-turn-on-pagination-on-a-viewset-like-modelviewset-pagina –

+0

@Deenaあなたの 'list'メソッドのコードを追加してください。 –

答えて

1

list()メソッドをオーバーライドしており、改ページされていないレスポンスを返さないため、APIで改ページ応答が得られていません。代わりに、あなたは、それ自体が汎用ビューまたはビューセットのためにページ分割レスポンスを返すDRFのlist()方法としてlist()方法でsuper()を呼び出す必要があります。

ページネーションを使用すると、一般的な ビューまたはビューセットを使用している場合のみ、が自動的に実行されます。 を通常のAPIViewに変更する場合は、ページ番号 を返すように、ページ分割APIをご自身でに電話する必要があります。

class UserAccountViewSet(viewsets.GenericViewSet, 
         mixins.CreateModelMixin, 
         mixins.UpdateModelMixin, 
         mixins.DestroyModelMixin): 

    def list(self, request, *args, **kwargs): 
     if request.GET.dict(): 
      return Response(status=status.HTTP_501_NOT_IMPLEMENTED) 

     # call 'super()' to get the paginated response 
     return super(UserAccountViewSet, self).list(request, *args, **kwargs) 
+0

それは '「スーパー」オブジェクトは、私は' ModelViewSet'の代わりに、すべてのミックスインと 'GenericViewSet'を使用することをお勧めしてもあなたがUserAccountViewSet''に 'mixins.ListModelMixin'を追加する必要があります – Deena

+0

list''何の属性」を持っていない発生します。 –

+0

GenericViewSetには具体的な理由があります。 – Deena

関連する問題