Django fitlter扩展的使用

  对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持。通常做搜索比较多一点。

安装
pip install django-filter
安装应用
INSTALLED_APPS = [
    ...
    'django_filters',
    ...
]
在配置文件中增加过滤后端的设置
# settings.py

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
}
在视图中添加filter_fields属性,指定可以过滤的字段
class OrdersManages(ListCreateAPIView):
    """
    订单管理
    """
    queryset = Orders.objects.all()
    serializer_class = OrdersSer
    pagination_class = PageNumber
    filter_fields = ['id','order_no']
filter类
from django_filters import rest_framework as filters
class OrdersFilter(filters.FilterSet):
    create_time__gte = filters.DateTimeFilter(field_name="create_time", lookup_expr='gte')
    create_time__lte = filters.DateTimeFilter(field_name="create_time", lookup_expr='lte')
    
    class Meta:
        model = Orders  # 模型名
        fields = ['order_no','create_time']

class OrdersManages(ListCreateAPIView):
    queryset = Orders.objects.all()
    serializer_class = OrdersSer
    pagination_class = PageNumber
    # filter_fields = ['id','order_no']
    filter_class = OrdersFilter # 过滤类
过滤器类

过滤器类和Django中表单类极其类似,写法基本一样,目的是指明过滤的时候使用哪些字段进行过滤,每个字段可以使用哪些运算。运算符的写法基本参照Django的ORM中查询的写法,比如:大于等于,小于等于用"gte",“lte”等等

可以通过模型快速构建过滤器类

class BookFilter(filters.FilterSet):
    class Meta:
        model = Bookinfo   # 模型名
        fields = ['btitle','bcomment']  # 可以使用的过滤字段

Meta中出现的fields是指过滤条件中可以出现的字段,默认是精确判等,查询的时候可以这样用:

# bcomment=80
http://127.0.0.1:8000/book/?btitle=&bcomment=80

如果不是判等,可以自定义过滤字段进行过滤:

  • 过滤器中常用的字段类型,这些类型要输模型中对应字段类型兼容
CharFilter         字符串类型
BooleanFilter      布尔类型
DateTimeFilter     日期时间类型
DateFilter         日期类型
DateRangeFilter    日期范围
TimeFilter         时间类型
NumberFilter       数值类型,对应模型中IntegerField, FloatField, DecimalField
  • 参数说明:
field_name: 过滤字段名,一般应该对应模型中字段名
lookup_expr: 查询时所要进行的操作,和ORM中运算符一致
  • Meta字段说明
model: 引用的模型,不是字符串
fields:指明过滤字段,可以是列表,列表中字典可以过滤,默认是判等;也可以字典,字典可以自定义操作
exclude = ['password'] 排除字段,不允许使用列表中字典进行过滤
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楼下安同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值