1

だから、これは私のビューセットです:

class PostViewSet(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer
    permission_classes = (IsAuthenticated, IsLikeOrOwnerDeleteOrReadOnly,)

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user, location=self.request.user.userextended.location)

    @detail_route(methods=['post'], permission_classes=[IsFromLoactionOrReadOnly])
    def like(self, request, pk=None):
        post = self.get_object()
        post.usersVoted.add(request.user)
        return Response(status=status.HTTP_204_NO_CONTENT)

これは私のURL /ルーターです:

router.register(r'posts', views.PostViewSet)

さて、この URL にアクセスすると、次のようになります。

/posts

DRF はすべての投稿とシリアライザーを送信します (または、私はそう思います..まだ多くの投稿を持っていないので、それらすべてを送信すると想定しています)。私がやりたいことは、ViewSet がシリアル化する投稿の数を 10 に制限できるようにすることです。シリアル化したい 10 個のオブジェクトは、API ユーザーに URL で送信するように強制したいページ番号によって異なります。たとえば、ユーザーに次のような URL で番号を送信するように強制したい:

/posts/x

バックエンドでは、pk x から x+9 までの投稿をシリアライズしたい (つまり、x=1 と仮定すると、pk=1、pk=2、pk=3... pk= で投稿をシリアライズしたい) 10.)。これはDRFで可能ですか?Paginationドキュメントを読むと、必要なもののように見えますが、ページネーションとは何か、それを使用して目的を達成する方法について頭を完全に包むことができないため、使用していると思います。ページネーションのドキュメントは次のとおりです。 http://www.django-rest-framework.org/api-guide/pagination/

前もって感謝します。

4

2 に答える 2

1

あなたが正しいです。これを実現するには、ページネーションが必要です。pagination_classあなたが書いたように含めるだけですserializer_class。また、ページ番号を付けたい番号を持つクラスを作成します。

from rest_framework.pagination import PageNumberPagination
class StandardResultsSetPagination(PageNumberPagination):
    page_size = 10
    page_size_query_param = 'page_size'
    max_page_size = 1000

と設定しpagniation_class = StandardResultsSetPaginationます。

于 2015-11-04T06:04:47.200 に答える
1

ご想像のとおり、Django Rest Framework が提供するページネーションコントロールを使用する必要があります。

このスニピットは、頭を包むのに役立つかもしれません:

{
    "count": 1023
    "next": "https://api.example.org/accounts/?page=5",
    "previous": "https://api.example.org/accounts/?page=3",
    "results": [
       …
    ]
}

期待される通常の「結果」に加えて、次の値と前の値も含まれる応答を示しています。これらは、前のページに相当するデータまたは次のページに相当するデータの結果を返すために使用できるエンド ポイントへのリンクです。これらのリンクを適切なユーザー コントロールにマップして、ページネーション ナビゲーションを実行できるようにするのは、フロント エンドの役割です。

于 2015-11-04T02:32:21.850 に答える