Loading

Django drf 排序

Django drf 排序

18.1 全局配置

配置排序类

REST_FRAMEWORK = {
    
    ......
    
    'DEFAULT_FILTER_BACKENDS': (
        'rest_framework.filters.OrderingFilter', # 注意这里不能使用django_filters.rest_framework.OrderingFilter,会报错。
    ),
}

视图

class ExampleView4(ModelViewSet):
    queryset = studentsInfo.objects.all()
    serializer_class = studentSerializer
    ordering_fields = ["id", "age"]

路由

from . import views
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register("filter", views.ExampleView4, basename="filter")
urlpatterns = [
    
] + router.urls

访问效果

GET /opt/filter/?ordering=-id
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

[
    {
        "id": 17,
        "name": "胡歌",
        "sex": "男",
        "age": 30,
        "classroom": "310",
        "info": "帅帅帅"
    },
    {
        "id": 16,
        "name": "范玉才",
        "sex": "男",
        "age": 23,
        "classroom": "310",
        "info": "要做个猛男,要猛!"
    },
    {
        "id": 15,
        "name": "彭于晏",
        "sex": "女",
        "age": 0,
        "classroom": "000",
        "info": "要做个猛男,要猛!"
    },
    {
        "id": 12,
        "name": "孙明辉",
        "sex": "男",
        "age": 23,
        "classroom": "333",
        "info": "这个人很懒,什么都没有留下"
    },
    {
        "id": 5,
        "name": "闵麒良",
        "sex": "男",
        "age": 23,
        "classroom": "310",
        "info": "河工胡歌"
    },
    {
        "id": 4,
        "name": "李四",
        "sex": "男",
        "age": 24,
        "classroom": "308",
        "info": "这个人很懒,什么也没有留下"
    },
    {
        "id": 3,
        "name": "张三",
        "sex": "男",
        "age": 25,
        "classroom": "307",
        "info": "这个人很懒,什么也没有留下"
    },
    {
        "id": 2,
        "name": "小红",
        "sex": "女",
        "age": 18,
        "classroom": "301",
        "info": "这个人很懒,什么也没有留下"
    }
]

18.2 局部配置

视图

from rest_framework.filters import OrderingFilter


class ExampleView4(ModelViewSet):
    queryset = studentsInfo.objects.all()
    serializer_class = studentSerializer
    filter_backends = [OrderingFilter]
    ordering_fields = ["id", "age"]

路由

from . import views
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register("filter", views.ExampleView4, basename="filter")
urlpatterns = [
    
] + router.urls

访问效果

GET /opt/filter/?ordering=-age
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

[
    {
        "id": 17,
        "name": "胡歌",
        "sex": "男",
        "age": 30,
        "classroom": "310",
        "info": "帅帅帅"
    },
    {
        "id": 3,
        "name": "张三",
        "sex": "男",
        "age": 25,
        "classroom": "307",
        "info": "这个人很懒,什么也没有留下"
    },
    {
        "id": 4,
        "name": "李四",
        "sex": "男",
        "age": 24,
        "classroom": "308",
        "info": "这个人很懒,什么也没有留下"
    },
    {
        "id": 5,
        "name": "闵麒良",
        "sex": "男",
        "age": 23,
        "classroom": "310",
        "info": "河工胡歌"
    },
    {
        "id": 12,
        "name": "孙明辉",
        "sex": "男",
        "age": 23,
        "classroom": "333",
        "info": "这个人很懒,什么都没有留下"
    },
    {
        "id": 16,
        "name": "范玉才",
        "sex": "男",
        "age": 23,
        "classroom": "310",
        "info": "要做个猛男,要猛!"
    },
    {
        "id": 2,
        "name": "小红",
        "sex": "女",
        "age": 18,
        "classroom": "301",
        "info": "这个人很懒,什么也没有留下"
    },
    {
        "id": 15,
        "name": "彭于晏",
        "sex": "女",
        "age": 0,
        "classroom": "000",
        "info": "要做个猛男,要猛!"
    }
]

posted @ 2022-10-24 17:33  minqiliang  阅读(55)  评论(0编辑  收藏  举报
-->