过滤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倒序
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!