怎么在Django中利用滤波器实现动态过滤

  介绍

怎么在Django中利用滤波器实现动态过滤?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<强>前期准备

在虚拟开发环境中安装:

pip安装django-filter

在Django的项目配置文件中安装并配置django_filters应用:

INSTALLED_APPS =, (   ,,…   & # 39;才能django_filters& # 39;   ]      REST_FRAMEWORK =, {   #,才能过滤器默认后端   & # 39;才能DEFAULT_FILTER_BACKENDS& # 39;:, (   ,,,,,& # 39;django_filters.rest_framework.DjangoFilterBackend& # 39;,),   }

<>强快速使用

模型。py

class 用户(models.Model):   #,才能模型字段   name 才能=,models.CharField (max_length=10, verbose_name=靶彰?   sex 才能=,models.BooleanField(默认=1,verbose_name=靶员稹?   时间=age 才能;models.IntegerField (verbose_name=澳炅洹?   phone 才能=,models.CharField (max_length=20, null=True,, verbose_name=暗缁啊?   时间=addr 才能;models.CharField (max_length=100,零=True, verbose_name=暗刂贰?      class 才能;元:   ,,,db_table =,“tb_user"   ,,,verbose_name =,“用户”;   ,,,verbose_name_plural =, verbose_name

新建过滤器。py:过滤器类

import  django_filters   得到.models  import 用户      class  UserFilter (django_filters.FilterSet):      class 才能;元:   ,,,model =用户   ,,,fields =, (“name",,“age"], #指定动态过滤的字段,默认精准匹配

注意:

元字段说明
模型:引用的模型,不是字符串
字段:指明过滤字段,可以是列表,列表中字典可以过滤,默认是判等;也可以字典,字典可以自定义操作
排除=[& # 39;密码# 39;]排除字段,不允许使用列表中字典进行过滤

视图。py

得到django_filters.rest_framework  import  DjangoFilterBackend   得到rest_framework.generics  import  ListAPIView   得到rest_framework  import 过滤器   class  UserViewSet (ListAPIView):   时间=queryset 才能;User.objects.all(),, #获取数据   时间=serializer_class 才能;UserModelSerializer  #指定序列化类   filter_class 才能=,UserFilter , #,指定过滤器类

序列化器。py

得到rest_framework  import 序列化器   得到.models  import 用户   class  UserModelSerializer (serializers.ModelSerializer):   class 才能;元:   ,,,model =用户   ,,,fields =,“__all__"

urls . py

路径(& # 39;用户/& # 39;,UserViewSet.as_view ()),

首先理解上面是动态过滤,前端在请求头如下传递参数,传递参数的个数是不同的,而动态过滤只会过滤:有参数,且参数有值的项。

http://ip港口/user/? name=查找内容,年龄=查找内容
http://ip港口/user/? name=,=年龄查找内容
http://ip港口/user/? name=查找内容,年龄=
http://ip:港口/user/? name=,=
http://ip:年龄港口/user/

精准过滤,模糊过滤并存

class  UserFilter (django_filters.FilterSet):   class 才能;元:   ,,,model =用户   ,,,#,fields =, (“name",,“age"】   ,,,fields =, {   ,,,,,“name":,(& # 39;精确# 39;& # 39;icontains& # 39;],   ,,,,,“age":,(& # 39;精确# 39;),   ,,,}

准确:默认过滤方式,精确过滤

icontains:模糊过滤

http://ip港口/user/? name=查找内容,name_icontains=查找内容,年龄=查找内容

范围过滤

class  UserFilter (django_filters.FilterSet):   class 才能;元:   ,,,model =用户   ,,,#,fields =, (“name",,“age"】   ,,,fields =, {   ,,,,,“name":,(& # 39;精确# 39;& # 39;icontains& # 39;],   ,,,,,“age":,(& # 39;精确# 39;& # 39;一种# 39;,& # 39;lte # 39;],   ,,,}

对以上过滤器来说

名称精确查找
name__icontains模糊查找年龄
精准查找
age__gte大于等于
age__lte小于等于

排序

class  UserFilter (django_filters.FilterSet):   #定义排序字段:依赖哪个字段排序   sort 才能=,django_filters.OrderingFilter(字段=(& # 39;年龄# 39;,))   class 才能;元:   ,,,model =用户   ,,,#,fields =, (“name",,“age"】   ,,,fields =, {   ,,,,,“name":,(& # 39;精确# 39;& # 39;icontains& # 39;],   ,,,,,“age":,(& # 39;精确# 39;& # 39;一种# 39;,& # 39;lte # 39;],   null   null   null   null   null   null   null   null   null   null

怎么在Django中利用滤波器实现动态过滤