DRF过滤、搜索过滤、排序方法

DRF框架过滤器、搜索、排序方法。

过滤器

  1. 过滤器的使用首先需要安装django-filter模块,— pip install django-filter模块
  2. 在视图中导入模块
from django_filters.rest_framework import DjangoFilterBackend
  1. 在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页面
]
  1. 导入成功后在视图类中添加两个属性
class Test(ListModelMixin, RetrieveModelMixin, GenericViewSet):
	filter_backends = [DjangoFilterBackend]  # 刚才导入的过滤器类
	filter_fields = ('id', 'date')   # 过滤的字段
  • 当然这只局限于对已有字段的相等过滤,并没有大于或者小于某个条件的过滤,我们还可以通过自定义过滤类来实现。
  1. 首先导入类模块
import django_filters
  1. 然后新建一个过滤类
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 属性。
  1. 删除上面的filter_fields属性替换成filter_class
class Test(ListModelMixin, RetrieveModelMixin, GenericViewSet):
	filter_backends = [DjangoFilterBackend]  # 刚才导入的过滤器类
	filter_class = TestFilter  # 指定过滤类

搜索过滤

  • 在DRF中REST framework提供了SearchFilter过滤器来帮助我们快速指明数据按照指定字段进行搜索
  1. 首先可以导入过滤器
from rest_framework.filters import SearchFilter
  1. 然后在视图类中配置过滤器类
class TestView(ModelViewSet):
	filter_backends = [SearchFilter]  # 配置过滤器类
	search_fields = ['code', 'name'] # 配置搜索字段
  • 以上配置完就可以根据前端传的?search=参数进行code和name的模糊搜索

排序

  • 在DRF中同样有类似的排序过滤器
  1. 首先导入过滤类
from rest_framework.filters import OrderingFilter
  1. 然后在视图类中添加排序过滤类
class TestView(ModelViewSet):
	filter_backends = [OrderingFilter]  # 配置排序过滤类
	ordering_fields = ['date'] # 配置排序字段
  • 以上配置完成就可以根据前端传递的?ordering=date参数进行日期排序,当前面加-时是按照日期倒序排列。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值