怎么在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中利用滤波器实现动态过滤