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'] 排除字段,不允许使用列表中字典进行过滤
上一篇:poj3254 Corn Fields


下一篇:Odoo14学习笔记(10) 创建视图模型