过滤Filtering,排序Ordering

发布时间 2023-04-06 16:51:14作者: Hide_凉辰
  • 安装 django-filter
  • 过滤Filtering
  • 在settings 的
    INSTALLED_APPS下注册
  • "rest_framework",  # 注册rest_framework
    "django_filters", # 注册过滤包
  • 全局过滤器
  •     "DEFAULT_FILTER_BACKENDS": [
            'django_filters.rest_framework.DjangoFilterBackend'
        ],

     

  • 视图使用
  • class StudentModelViewSet(ModelViewSet):
        queryset = Student.objects.all()  # 指定视图操作的层级为所有数据
        serializer_class = StudentModelSerializers  # 指定序列化器
        filter_fields = ['age']#过滤字段

     

  • 建议使用单独过滤
  • 自写过滤类
  • import django_filters
    from .models import Student
    
    
    class StudentFilter(django_filters.FilterSet):
        class Meta:
            model = Student
            fields = ["name", "sex", "age"]

     

  • 视图使用
  • from rest_framework.viewsets import ModelViewSet
    from FRAMEWORK.models import Student
    from FRAMEWORK.serializers import StudentModelSerializers
    from FRAMEWORK.Filter import StudentFilter
    from django_filters.rest_framework import DjangoFilterBackend
    
    
    class StudentModelViewSet(ModelViewSet):
        queryset = Student.objects.all()  # 指定视图操作的层级为所有数据
        serializer_class = StudentModelSerializers  # 指定序列化器
        filter_backends = [DjangoFilterBackend]
        filterset_class = StudentFilter

     

  • 排序Ordering
  • 排序的全局配置与过滤一致,配置内容不太一致
  • - `DEFAULT_SORT_BY_PARAM`用于指定客户端指定排序字段时的查询参数名称。
  • 例如,如果你将其设置为`sort_by`,则客户端可以使用如下查询参数指定要排序的字段:`?sort_by=created_at`。如果你不指定该参数,则默认值为`sort`。
  • - `DEFAULT_ORDERING_PARAM`用于指定客户端指定排序方式时的查询参数名称。例如,如果你将其设置为`order_by`,则客户端可以使用如下查询参数指定排序方式:`?order_by=-created_at`。如果你不指定该参数,则默认值为`ordering`。
  • - `ORDERING_PARAM`用于指定服务器返回的响应中包含排序方式的字段名称。例如,如果你将其设置为`ordering`,则响应中将包含如下字段:`"ordering": "-created_at"`。如果你不指定该参数,则默认值也为`ordering`。 注意,这些参数只是为了方便客户端使用而设置的,它们并不会影响服务器端的实现。在服务器端,你可以使用`ordering`属性来指定要使用的排序方式和字段。
  • "DEFAULT_FILTER_BACKENDS": [
    'django_filters.rest_framework.DjangoFilterBackend',#过滤
    'rest_framework.filters.OrderingFilter',#排序
    ],
    'DEFAULT_SORT_BY_PARAM': 'sort_by',
    'DEFAULT_ORDERING_PARAM': 'order_by',
    'ORDERING_PARAM': 'ordering',
    'DEFAULT_ORDERING': ['age'], # 指定默认排序字段

     

  • 自定义排序组件
  • 视图编写
  • class StudentModelViewSet(ModelViewSet):
        queryset = Student.objects.all()  # 指定视图操作的层级为所有数据
        serializer_class = StudentModelSerializers  # 指定序列化器
        # 过滤
        # filter_backends = [DjangoFilterBackend]
        # filterset_class = StudentFilter
        # 排序
        filter_backends = [OrderingFilter]
        order_fields = ['age']  # 排序依赖字段
        ordering = ['-age']  # age倒序