过滤Filtering,排序Ordering

  • 安装 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倒序
    复制代码

     

posted @   Hide_凉辰  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示