DRF框架之Django-filter

1、安装配置

Django-filter 支持的Python版本和Django版本、DRF版本如下:

  • Python: 3.5, 3.6, 3.7, 3.8
  • Django: 1.11, 2.0, 2.1, 2.2, 3.0
  • DRF: 3.10+

安装

pip install django-filter

注册应用

INSTALLED_APPS = [
    ...
    'django_filters',
]

models.py

class Userinfo(models.Model):
  name = models.CharField(max_length=10, verbose_name='姓名')
  age = models.IntegerField(verbose_name='年龄')
  ......
	class Meta:
    	db_table = 'userinfo'
    	verbose_name = "用户"

2、使用方法#

方式1:

视图层直接设置过滤字段

# 以name和age过滤
class UserView(ListAPIView):
    queryset = userinfo.objects.all()
    serializer_class = UserInfoSerializer
    filter_backends = (DjangoFilterBackend,)
    filter_fields = ('name', 'age')

filter_backends 配置 过滤器,也可以在 setting.py 文件全局配置

REST_FRAMEWORK = {
  'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',),
}

设置了过滤字段name和age,默认是 精确过滤,name 必须全部匹配到

方式2:

自定义过滤器类:

模糊过滤

import django_filters
from user.models import User

class UserFilter(django_filters.FilterSet):
   class Meta:
     model = Userinfo
     fields = {
        "name": ['icontains'],
        "age": ['exact'],
     }

更改视图

class UserView(ListAPIView):
    queryset = Userinfo.objects.all()
    serializer_class = UserInfoSerializer
    # 指定过滤器类
    filter_class = UserFilter   

范围过滤

class UserFilter(django_filters.FilterSet):
	age_gte = django_filters.NumberFilter(field_name='age', lookup_expr='gte')
	age_lte = django_filters.NumberFilter(field_name='age', lookup_expr='lte')
	class Meta:
		model = Userinfo
		fields = {
			"name": ['icontains'],
     }

参数说明:

exact:默认的过滤方式,精确判等
icontains:模糊过滤
field_name:过滤的字段名,要与模型类中所对应
lookup_expr:查询时所要进行的操作,和ORM中运算符一致

生成的过滤器

name 精确查找
name__icontains 模糊查找
age__gte 大于等于
age__lte 小于等于

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值