zoukankan      html  css  js  c++  java
  • 0028 DRF框架开发(15 django-filter过滤)

      对于列表数据,可能需要根据字段进行过滤,DRF可以通过添加django-filter来增强支持。

    1 安装django-filter(已安装)

    2 在配置文件中增加过滤后端的设置。

    INSTALLED_APPS = [
        ...
        'django_filters',  # 需要注册应用,
    ]
    
    REST_FRAMEWORK = {
        'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
    }

    3 精确查找

      打开Applications/Examples/views/Schools.py,找到最后一个视图,增加指定过滤字段。

    class SchoolViewSet(GenericViewSet, mixins.ListModelMixin, mixins.CreateModelMixin, mixins.UpdateModelMixin,
                        mixins.RetrieveModelMixin, mixins.DestroyModelMixin):
        queryset = Schools.objects.all()
        serializer_class = SchoolsSerializer
        filter_fields = ('name',)
    

      指定该过滤字段,只能用于精确查询,DRF会自动把该参数传到前端,要求前端在查询时,提供这些字段。

    4 运行接口文档,找到SchoolViewSet中的list方法,输入查找条件,即可看到如下效果:

    5 自定义过滤器

      在Applications/Examples/下创建一个filters.py文件,用于存储该APP中的过滤器。新增一个过滤器,代码如下:

    import django_filters
    from .models import Schools
    
    
    class SchoolFilter(django_filters.rest_framework.FilterSet):
        """
        【参数说明】
        lookup_expr表示查询方式,有以下可选项:
            startswith:表示以什么开头,istartswith:表示忽略大小写
            endswith:表示以什么结尾,iendswith:表示忽略大小写
            contains:表示包含,icontains表示忽略大小写
            gt:表示大于,gte表示大于等于
            lt:表示小于,lte表示小于等于
            isnull:表示为空
            exact:表示精确匹配,iexact表示忽略大小写
        """
        name = django_filters.CharFilter(name='name', lookup_expr='icontains')
    
        class Meta:
            model = Schools
            fields = ['name', ]
    

    6 在视图中引用自定义过滤器

      打开Applications/Examples/views/Schools.py,修改最后一个类:

    from rest_framework import filters
    
    
    class SchoolViewSet(GenericViewSet, mixins.ListModelMixin, mixins.CreateModelMixin, mixins.UpdateModelMixin,
                        mixins.RetrieveModelMixin, mixins.DestroyModelMixin):
        queryset = Schools.objects.all()
        serializer_class = SchoolsSerializer
        filter_backends = (filters.SearchFilter,)
        search_fields = ('name',)
    

    7 运行工程,在接口文档中找到SchoolViewSet的list接口,测试结果如下:

      

  • 相关阅读:
    今天开始用 VSU 2010
    Visual Studio 2010 模型设计工具 基本应用
    Asp.Net访问Oracle 数据库 执行SQL语句和调用存储过程
    Enterprise Library 4.1 Security Block 快速使用图文笔记
    解决“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。”(图)
    一个Oracle存储过程示例
    Enterprise Library 4.1 Application Settings 快速使用图文笔记
    Oracle 10g for Windows 简体中文版的安装过程
    Oracle 11g for Windows 简体中文版的安装过程
    Oracle 9i 数据库 创建数据库 Net 配置 创建表 SQL查询 创建存储过程 (图)
  • 原文地址:https://www.cnblogs.com/dorian/p/12383033.html
Copyright © 2011-2022 走看看