A. オフセットページャ。
ページャのオフセットでは、制限はワンタイム表示の数を表し、そして彼は、シフト量の先頭に基づくオフセットによって表されます。
rest_framework.pagination インポートLimitOffsetPaginationの クラスMyLimitOffsetPagination(LimitOffsetPagination): # ?オフセット=&=の数を表示するために先頭からのオフセットの数を制限する limit_query_param = 「リミット」 offset_query_paramは = 「オフセット」 #?、トップ3を相殺してリミットデフォルトを渡しません項目のみ再度3表示ずれた位置から後退しているオフセット default_limitを3 = #?制限は最大数の表示をカスタマイズすることができる max_limitを5 = #唯一の制限の順序、数または数の事前ランクに関連して実施されてもよい#?= -価格&リミット= 2注文 =>を価格2前#pahenations.py
景色
rest_framework.generics インポートListAPIView クラスCarListAPIView(ListAPIView): #フィルタなしの条件をクエリセットしない場合、(.ALLする必要がある)、そうでなければ問題ページングが存在することになる クエリセット= models.Car.objects.all() serializer_class = serializers.CarModelSerializer #ページング成分-クラス]タブにビュークラスに構成された-タブページングクラスはに提供するカスタムクラス継承DRFが必要です pagination_class = pagenations.MyLimitOffsetPaginationを
II。カーソル(暗号化)フィニッシャー。
ページャを暗号化すると、次の事前に表示されるURL暗号化された暗号化を適用しています。
ときにそこに発注、ビューの順序でソート順を追加する必要はありませんし、URLフィールドに追加する必要があり、タブアセンブリ。
それは、フィールドの順序でソートされます。
pahenations.py
#1 注:必要もページングベースの照合 #1)インタフェースはOrderingFilterフィルタを設定されている場合は、URLが発注合格しなければなりません #はフィールドを注文することにより、1)インタフェースが設定されていない場合OrderingFilterフィルタは、ページクラスで宣言する必要がありますデフォルトのソート用 から rest_framework.paginationのインポートCursorPaginationの クラス:MyCursorPagination(CursorPagination) cursor_query_param = ' カーソル' PAGE_SIZE = 3。 page_size_query_param = ' PAGE_SIZE ' MAX_PAGE_SIZE = 5。 順序 = ' -pk '
views.py
rest_framework.generics インポートListAPIView クラスCarListAPIView(ListAPIView): #フィルタなしの条件をクエリセットしない場合、(.ALLする必要がある)、そうでなければ問題ページングが存在することになる クエリセット= models.Car.objects.all() serializer_class = serializers.CarModelSerializer #ページング成分-クラス]タブにビュークラスに構成された-タブページングクラスはに提供するカスタムクラス継承DRFが必要です pagination_class = pagenations.MyCursorPaginationを
III。カスタムフィルタ。
まず、前記オーバーライドfilter_querysetの方法であって、前記選択されたクエリセットよ、フィルタとして、クラスを定義する必要があり、そしてクエリセットを返します。
フィルター
#のカスタムフィルタ、インタフェース:?リミット=バーの数が表示された クラスLimitFilterを: DEF filter_queryset(セルフ、要求、クエリセット、ビュー): #の?フロント上限を固定= ...フィルタリングパラメータを渡す リミット= request.query_params.get (' 限界' ) IF リミット: リミット = INT(限界) を返す[:リミット]クエリセットを 返すクエリセットを
景色
rest_framework.generics インポートListAPIView クラスCarListAPIView(ListAPIView): #フィルタなしの条件をクエリセットしない場合、(.ALLする必要がある)、そうでなければ問題ページングが存在することになる クエリセット= models.Car.objects.all() serializer_class = serializers.CarModelSerializer #ローカル構成クラス(グローバルコンフィギュレーションDEFAULT_FILTER_BACKENDSを用いて)濾過し filter_backends = [LimitFilter]
IV。ジャンゴ・フィルタのフィルタ挿入
インストール:
>:PIP3ジャンゴ・フィルタをインストールします
レイヤのフィルタ条件:カスタムAPI / filters.py
#のジャンゴ-フィルタ插件过滤器类 から django_filters.rest_framework.filterset インポートフィルタセット から。輸入モデル #自定义过滤字段 から django_filtersはインポートフィルタ クラスCarFilterSet(フィルタセット): MIN_PRICE = filters.NumberFilter(FIELD_NAME = ' 価格'、lookup_expr = ' GTE ' ) MAX_PRICE = filters.NumberFilter(FIELD_NAME = ' 価格'、lookup_expr = " LTE " ) クラスメタ: モデル = models.Car フィールドは [= 「ブランド」、「MIN_PRICE 」、「MAX_PRICEの」] #のブランドモデルは、フィールドに存在するが、一般的に、パケットフィールドのために使用することができる #1 MIN_PRICE、MAX_PRICEのカスタムフィールドが必要とされます独自のカスタムフィルタ
#Djangoのフィルタプラグフィルタ から django_filters.rest_framework インポートDjangoFilterBackend から .filters インポートCarFilterSetの クラス:CarListAPIView(ListAPIView) クエリセット = models.Car.objects.all() serializer_class = serializers.CarModelSerializer #グローバルコンフィギュレーションを使用して、ローカル構成クラスがフィルタリングされます( DEFAULT_FILTER_BACKENDS) filter_backends = [DjangoFilterBackend] #Djangoのフィルタフィルタプラグイン使用 filter_class = CarFilterSet #インターフェイス:?ブランド= = ...&...&MIN_PRICE MAX_PRICE = ... # 例えば:?ブランド= BMW&MIN_PRICE = 5&MAX_PRICE = 10 => BMWブランド車の間に5〜10