一、使用方法
1.引入方式
from rest_framework.filters import OrderingFilter
2.添加引擎
将OrderingFilter引擎添加到filter_backends列表中,也可以添加到全局
filter_backends = [DjangoFilterBackend, OrderingFilter]
3.指定排序字段
使用ordering_fields指定需要排序的字段
ordering_fields = ['id', 'name', 'leader', 'programmer', 'tester']
二、完整代码展示
from rest_framework.response import Responsefrom rest_framework import statusfrom rest_framework.generics import GenericAPIViewfrom django_filters.rest_framework import DjangoFilterBackendfrom rest_framework.filters import OrderingFilterfrom .models import Projectsfrom .serializers import ProjectsModelSerializerclass ProjectsPage(GenericAPIView):'''类视图'''queryset = Projects.objects.all()serializer_class = ProjectsModelSerializerfilter_backends = [OrderingFilter]ordering_fields = ['id', 'name', 'leader', 'programmer', 'tester']def get(self, request, pk=None):qs = self.get_queryset()qs = self.filter_queryset(qs)serializer_obj = self.get_serializer(instance=qs, many=True)return Response({'code': 0, 'res': "success", 'msg': serializer_obj.data}, status=status.HTTP_200_OK)
三、结果验证
如果是数字则默认为从小到大排序,字符串默认为以ASCII码从小到大排序,排序的查询字符串参数默认为ordering,如果要进行倒序排列,则在需要排序的字段前面指定一个减号(-)即可,如:ordering=-name
四、路由写法
"""LearnDjango URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/3.0/topics/http/urls/Examples:Function views1. Add an import: from my_app import views2. Add a URL to urlpatterns: path('', views.home, name='home')Class-based views1. Add an import: from other_app.views import Home2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))"""from django.contrib import adminfrom django.urls import path# from projects.views import indexfrom django.urls import include# 全局路由配置# 1, urlpatterns 为固定名称的列表# 2, 列表中的一个元素,就代表一条路由 按照顺序去发现# 3,从上到下进行匹配,如果能匹配上,django会导入和调用path函数第二个参数指定的视图# 4,匹配不上会自动抛出一个404页面错误 默认为404页面urlpatterns = [path('admin/', admin.site.urls),# 添加编写好的视图在这里# path('index/', index()),# include 去子应用的路由模块中寻找# web上来一个请求访问 index路由,现在全局路由中匹配# 发现为include ,就会在去子应用的路由中去匹配path('',include('projects.urls'))]
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2020/7/25 9:41# @Author : Addicated# @Site :# @File : urls.py# @Software: PyCharmfrom django.urls import path# from .views import index# 导入视图from . import views# 应用下方的子路由# 1.每一个应用(模块)都会维护一个子路由,当前应用的路由信息# 2. 跟主路由一样,也是从上到下进行匹配# 3. 可以匹配上,则执行path第二个参数指定的视图,匹配不上则报404异常urlpatterns = [# path('',index)# 类视图的注册 类视图后.as_view() 方法# 如果为类视图,path第二个参数一定为as_view()方法的调用# path("",views.IndexView.as_view()),# 针对路径传参来进行 int 路径参数类型转换器,只有数字才会被匹配到# :坐标为转换器,右边为参数别名 视图函数类就可以直接在方法上的第三个参数写# def get(self,request,pk): pk就会自动适配前面传来的值# int ,slug 参数的一种类型,uuid# path("<int:pk>/",views.IndexView.as_view())# path('projects/',views.ProjectsList.as_view()),# path('projects/<int:pk>',views.ProjectDetail.as_view()),# path('projects/<int:pk>', views.ProjectsPage.as_view()),path('projects/', views.ProjectsPageGenricView.as_view())]
