DRF框架过滤器、搜索、排序方法。
过滤器
- 过滤器的使用首先需要安装django-filter模块,— pip install django-filter模块
- 在视图中导入模块
from django_filters.rest_framework import DjangoFilterBackend
- 在settings.py的INSTALLED_APPS中添加app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01.apps.App01Config',
'rest_framework', # DRF html页面
'django_filters' # 过滤 html页面
]
- 导入成功后在视图类中添加两个属性
class Test(ListModelMixin, RetrieveModelMixin, GenericViewSet):
filter_backends = [DjangoFilterBackend] # 刚才导入的过滤器类
filter_fields = ('id', 'date') # 过滤的字段
-
当然这只局限于对已有字段的相等过滤,并没有大于或者小于某个条件的过滤,我们还可以通过自定义过滤类来实现。
-
首先导入类模块
import django_filters
- 然后新建一个过滤类
class TestFilter(django_filters.FilterSet):
# 可以添加一些时间范围的过滤
date_gte = django_filters.DateFilter(label='日期大于', field_name='date', lookup_expr='date__gte')
date_lt = django_filters.DateFilter(label='日期小于', field_name='date', lookup_expr='date__lte')
class Meta:
model = Test # 过滤的model。
fields = ['id'] # 需要过滤的字段,类似上面的filter_fields 属性。
- 删除上面的filter_fields属性替换成filter_class
class Test(ListModelMixin, RetrieveModelMixin, GenericViewSet):
filter_backends = [DjangoFilterBackend] # 刚才导入的过滤器类
filter_class = TestFilter # 指定过滤类
搜索过滤
-
在DRF中REST framework提供了SearchFilter过滤器来帮助我们快速指明数据按照指定字段进行搜索
-
首先可以导入过滤器
from rest_framework.filters import SearchFilter
- 然后在视图类中配置过滤器类
class TestView(ModelViewSet):
filter_backends = [SearchFilter] # 配置过滤器类
search_fields = ['code', 'name'] # 配置搜索字段
- 以上配置完就可以根据前端传的?search=参数进行code和name的模糊搜索
排序
-
在DRF中同样有类似的排序过滤器
-
首先导入过滤类
from rest_framework.filters import OrderingFilter
- 然后在视图类中添加排序过滤类
class TestView(ModelViewSet):
filter_backends = [OrderingFilter] # 配置排序过滤类
ordering_fields = ['date'] # 配置排序字段
- 以上配置完成就可以根据前端传递的?ordering=date参数进行日期排序,当前面加-时是按照日期倒序排列。
Original: https://blog.csdn.net/nothing_may/article/details/121789470
Author: may_mlg
Title: DRF过滤、搜索过滤、排序方法
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/734346/
转载文章受原作者版权保护。转载请注明原作者出处!