フィルタアセンブリ

フィルタアセンブリ

並べ替え検索フィルタグループ

DRF書か

第一歩
from rest_framework.filters import OrderingFilter

ステップ
ローカル設定フィルタを
filter_backends = [OrderingFilter,]
ソートフィールドから:発注= -価格、ID
ordering_fields = ['price', 'id', 'students']

第三段階は、
リクエストリンクされたスタイルの
http://127.0.0.1:8080?ordering=-price,id
ソート同じソートIDに従って行わ価格

カスタムは、(データの数を制限する)チェックグループをフィルタリング

最初のステップ
を作成するには、以下のフォルダを作成したアプリでfilters.py気軽にファイル名を

第二ステップ
from rest_framework.filters import BaseFilterBackend
書き換えクラスの継承はBaseFilterBackend、メソッドをオーバーライドfilter_queryset

from rest_framework.filters import BaseFilterBackend

class LimitFilter(BaseFilterBackend):
    def filter_queryset(self, request, queryset, view):
        li = request.query_params.get('li')
        try:
            # 取得到返回的是处理过后的queryset, 但是li可能是不是数字
            return queryset[:int(li)]
        except:
            # 取不到返回原来的
            return queryset

第三段階は、
カスタムフィルタをインポートします
from .filters import LimitFilter

第四の工程は、
フィルタを設定しました
filter_backends = [LimitFilter,]

グループ検索フィルターを検索

第一歩
from rest_framework.filters import SearchFilter

ステップは、
フィルタを設定しました
filter_backends = [SearchFilter,]

第三段階は、
検索可能なワードを設定するために
search_fields = ['name', 'brief']
検索を解く(であるフルテキスト検索で当前接口的序列化类连接的表中的字段
テーブルの偶数フィールドを照会することができません

第四段階の
要求リンクスタイル
http://127.0.0.1:8080?search=python

フィルタグループ検索ページ

クラスは唯一のページャ設定することができます
最初のステップ
を作成するには、以下のフォルダを作成したアプリでpaginations.py気軽にファイル名を

第二段階
from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination
書き換えクラスの継承

  1. BaseFilterBackend(普通分页器)
  2. LimitOffsetPagination(偏移分页器)
  3. CursorPagination(排序分页器)

この方法は、書き換えfilter_queryset
コードを:

from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination

# 普通分页器
class CoursePageNumberPagination(PageNumberPagination):
    # 默认一页条数
    page_size = 2
    # 选择哪一页的key
    page_query_param = 'page'
    # 一般不开放自定义
    # 用户自定义一页条数
    page_size_query_param = 'page_size'
    # 用户自定义一页最大控制条数
    max_page_size = 10
    
    
# 偏移分页器(可以从第几条加载到第几条)
class CourseLimitOffsetPagination(LimitOffsetPagination):
    # 默认一页条数
    default_limit = 2
    # 从offset开始往后显示limit条
    limit_query_param = 'limit'
    offset_query_param = 'offset'
    max_limit = 2
    

# 排序分页器(按照规则排序并且分页)
class CourseCursorPagination(CursorPagination):
    cursor_query_param = 'cursor'
    page_size = 2
    page_size_query_param = 'page_size'
    max_page_size = 2
    # ordering = 'id'  # 默认排序规则,不能和排序过滤器OrderingFilter共存

第三段階は、
カスタムフィニッシャーをインポートします
from .paginations import CoursePageNumberPagination, CourseLimitOffsetPagination, CourseCursorPagination

第四のステップ
カスタム仕上げ設定(インターフェイス以下同じことがページャを用いて構成することができる)
pagination_class = CoursePageNumberPagination
pagination_class = CourseLimitOffsetPagination
pagination_class = CourseCursorPagination

並び替えフィルター

Djangoのフィルタプラグインのインストール

あなたはインストールする必要がdjango-filterプラグイン
pip install django-filter
書き換え内ジャンゴ・フィルタをdjangoし、フロントと別の分類のスクリーニングはまた前とソートの分離の終了後に行うことができませんいずれかの後端手段。rest_frameworkfilter

フィルタを使用して分類

最初のステップ
インストールdjango-filterモジュール

第2段
のガイドパッケージ
from django_filters.rest_framework import DjangoFilterBackend

ステップ
の設定分類フィルタ
filter_backends = [DjangoFilterBackend,]

第四のステップの
構成分類フィールド(テーブルをシリアル化する必要があり、いくつかのフィールドが外部キーフィールドであってもよいです)
filter_fields = ['course_category']

第五工程の
要求リンクスタイル
http://127.0.0.1:8080?course_category=2

間隔フィルタのフィルタ

基づいて、django-filterプラグイン、(通常はデジタルフィールドに)スクリーニング指定セクションを完了する

最初のステップ
を作成するには、以下のフォルダを作成したアプリでfilters.py気軽にファイル名を

第二の工程
の所望のモジュールの導入
from django_filters.rest_framework.filterset import FilterSet
from django_filters.rest_framework import filters
継承FilterSet
書き換えライトシーケンスクラスに似て
NumberFilter:データ型フィルタを提供し、そこに対応するデータの多くの種類である
lte以下:
gte:以上
field_name:分類部とすることができる指定されたフィールドは、シーケンスでなければなりません順にクラスフィールド
コード:

from django_filters.rest_framework.filterset import FilterSet
from django_filters.rest_framework import filters
from . import models

class CourseFilterSet(FilterSet):
    # 价格小于指定价格(lte)
    max_price = filters.NumberFilter(field_name='price', lookup_expr='lte')
    # 价格大于指定价格(gte)
    min_price = filters.NumberFilter(field_name='price', lookup_expr='gte')

    class Meta:
        model = models.Course
        fields = ['price', 'max_price', 'min_price']

第三ステップ
のガイドパケット
from django_filters.rest_framework import DjangoFilterBackend
輸入カスタムクラス分類フィルタの
from .filters import CourseFilterSet
設定フィルタクラスの
filter_backends = [DjangoFilterBackend]
設定
filter_fields = ['course_category']-私たちが書くdjango_filterヘルプ
filter_class = CourseFilterSet-私たち自身の自己分類定義されたフィルタ

おすすめ

転載: www.cnblogs.com/xiongchao0823/p/11986519.html