17

私は Django Rest Framework 3.1 にアップデートしたところ、すべてが崩壊したようです。

私の中で私serializers.pyは次のコードを持っていました:

class TaskSerializer(serializers.ModelSerializer):
    class Meta:
    model = task
    exclude = ('key', ...)

class PaginatedTaskSerializer(pagination.PaginationSerializer):
    class Meta:
        object_serializer_class = TaskSerializer

これはうまく機能していました。3.1 のリリースでは、同じことを行う方法の例が見つかりPaginationSerializerません。サブクラスPageNumberPagination化してデフォルトのメソッドpaginate_querysetget_paginated_responseメソッドを使用しようとしましたが、結果をシリアル化できなくなりました。

言い換えれば、私の問題は、これを行うことができなくなったことです:

class Meta:
    object_serializer_class = TaskSerializer

何か案は?

前もって感謝します

4

3 に答える 3

23

私はそれを理解したと思います(少なくともほとんどの場合):

最初から使用する必要があったのは次のとおりです。

組み込みのページネーターを使用して、これを次のように変更views.pyします。

from rest_framework.pagination import PageNumberPagination

class CourseListView(AuthView):
    def get(self, request, format=None):
        """
        Returns a JSON response with a listing of course objects
        """
        courses = Course.objects.order_by('name').all()
        paginator = PageNumberPagination()
        # From the docs:
        # The paginate_queryset method is passed the initial queryset 
        # and should return an iterable object that contains only the 
        # data in the requested page.
        result_page = paginator.paginate_queryset(courses, request)
        # Now we just have to serialize the data just like you suggested.
        serializer = CourseSerializer(result_page, many=True)
        # From the docs:
        # The get_paginated_response method is passed the serialized page 
        # data and should return a Response instance.
        return paginator.get_paginated_response(serializer.data)

目的のページ サイズについては、 in を設定するだけPAGE_SIZEですsettings.py

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 15
}

更新前と同じように、応答の本文にあるすべてのオプション (カウント、次のリンク、戻るリンク) が並べられた状態で、すべての設定が完了しているはずです。

しかし、まだ私を悩ませていることがもう 1 つあります。何らかの理由で今のところ欠けている新しいhtml ページネーション コントロールも取得できるはずです...

私は間違いなくこれについてさらにいくつかの提案を使用できます...

于 2015-03-19T12:36:53.843 に答える
0

これが投稿されてから1年以上が経過しましたが、これが他の人の助けになることを願っています. 私の同様の質問への回答は、私にとっての解決策でした。DRF 3.2.3 を使用しています。

Django Rest Framework 3.2.3のページネーションがgenerics.ListCreateAPIViewで機能しない

それがどのように実装されているかを見ると、ページネーション + 可視 API のコントロールを取得するために必要なソリューションが得られました。

https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/mixins.py#L39

于 2016-04-15T17:45:29.287 に答える