一、使用方法

1.引入方式

  1. from rest_framework.filters import OrderingFilter

2.添加引擎

将OrderingFilter引擎添加到filter_backends列表中,也可以添加到全局

  1. filter_backends = [DjangoFilterBackend, OrderingFilter]

3.指定排序字段

使用ordering_fields指定需要排序的字段

  1. ordering_fields = ['id', 'name', 'leader', 'programmer', 'tester']

二、完整代码展示

  1. from rest_framework.response import Response
  2. from rest_framework import status
  3. from rest_framework.generics import GenericAPIView
  4. from django_filters.rest_framework import DjangoFilterBackend
  5. from rest_framework.filters import OrderingFilter
  6. from .models import Projects
  7. from .serializers import ProjectsModelSerializer
  8. class ProjectsPage(GenericAPIView):
  9. '''
  10. 类视图
  11. '''
  12. queryset = Projects.objects.all()
  13. serializer_class = ProjectsModelSerializer
  14. filter_backends = [OrderingFilter]
  15. ordering_fields = ['id', 'name', 'leader', 'programmer', 'tester']
  16. def get(self, request, pk=None):
  17. qs = self.get_queryset()
  18. qs = self.filter_queryset(qs)
  19. serializer_obj = self.get_serializer(instance=qs, many=True)
  20. return Response({'code': 0, 'res': "success", 'msg': serializer_obj.data}, status=status.HTTP_200_OK)

三、结果验证

如果是数字则默认为从小到大排序,字符串默认为以ASCII码从小到大排序,排序的查询字符串参数默认为ordering,如果要进行倒序排列,则在需要排序的字段前面指定一个减号(-)即可,如:ordering=-name

四、路由写法

  1. """LearnDjango URL Configuration
  2. The `urlpatterns` list routes URLs to views. For more information please see:
  3. https://docs.djangoproject.com/en/3.0/topics/http/urls/
  4. Examples:
  5. Function views
  6. 1. Add an import: from my_app import views
  7. 2. Add a URL to urlpatterns: path('', views.home, name='home')
  8. Class-based views
  9. 1. Add an import: from other_app.views import Home
  10. 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
  11. Including another URLconf
  12. 1. Import the include() function: from django.urls import include, path
  13. 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
  14. """
  15. from django.contrib import admin
  16. from django.urls import path
  17. # from projects.views import index
  18. from django.urls import include
  19. # 全局路由配置
  20. # 1, urlpatterns 为固定名称的列表
  21. # 2, 列表中的一个元素,就代表一条路由 按照顺序去发现
  22. # 3,从上到下进行匹配,如果能匹配上,django会导入和调用path函数第二个参数指定的视图
  23. # 4,匹配不上会自动抛出一个404页面错误 默认为404页面
  24. urlpatterns = [
  25. path('admin/', admin.site.urls),
  26. # 添加编写好的视图在这里
  27. # path('index/', index()),
  28. # include 去子应用的路由模块中寻找
  29. # web上来一个请求访问 index路由,现在全局路由中匹配
  30. # 发现为include ,就会在去子应用的路由中去匹配
  31. path('',include('projects.urls'))
  32. ]
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # @Time : 2020/7/25 9:41
  4. # @Author : Addicated
  5. # @Site :
  6. # @File : urls.py
  7. # @Software: PyCharm
  8. from django.urls import path
  9. # from .views import index
  10. # 导入视图
  11. from . import views
  12. # 应用下方的子路由
  13. # 1.每一个应用(模块)都会维护一个子路由,当前应用的路由信息
  14. # 2. 跟主路由一样,也是从上到下进行匹配
  15. # 3. 可以匹配上,则执行path第二个参数指定的视图,匹配不上则报404异常
  16. urlpatterns = [
  17. # path('',index)
  18. # 类视图的注册 类视图后.as_view() 方法
  19. # 如果为类视图,path第二个参数一定为as_view()方法的调用
  20. # path("",views.IndexView.as_view()),
  21. # 针对路径传参来进行 int 路径参数类型转换器,只有数字才会被匹配到
  22. # :坐标为转换器,右边为参数别名 视图函数类就可以直接在方法上的第三个参数写
  23. # def get(self,request,pk): pk就会自动适配前面传来的值
  24. # int ,slug 参数的一种类型,uuid
  25. # path("<int:pk>/",views.IndexView.as_view())
  26. # path('projects/',views.ProjectsList.as_view()),
  27. # path('projects/<int:pk>',views.ProjectDetail.as_view()),
  28. # path('projects/<int:pk>', views.ProjectsPage.as_view()),
  29. path('projects/', views.ProjectsPageGenricView.as_view())
  30. ]