首页 > 其他分享 >drf模糊查询-第一种方法

drf模糊查询-第一种方法

时间:2022-11-22 13:48:34浏览次数:48  
标签:第一种 模糊 renderers server django 查询 class drf

  • 直接干:

    1、安装第三方包

    pip install django-filter

    2、settings.py的INSTALLED_APPS中注册应用

    INSTALLED_APPS = [
        ... ...   
        'django_filters',
    ]

    同样settings中加上配置

    REST_FRAMEWORK = {
        'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
    }

    3、视图类中增加属性 filterset_fields

    class ServerInfoList(generics.ListAPIView):
        """
        获取所有服务器信息
        """
        from django.db.models import Q
        # 使用orm的或查询Q相当于SQL的or关键字,查询集为状态为启用和禁用的
        queryset = ServerInfo.objects.filter(Q(status=1) | Q(status=2)).order_by('-update_time')
        serializer_class = ServerInfoSerializers
        # 渲染页面
        renderer_classes = (renderers.TemplateHTMLRenderer, renderers.JSONRenderer)
        # renderer_classes = [renderers.JSONRenderer]
        template_name = 'server_list.html'
        # 精确过滤,不支持模糊查询,元素为models中定义的需要过滤的字段  
        # filter_backends = [DjangoFilterBackend]
        filterset_fields = ['server_ip', 'app', 'app_port', 'project_name', 'status']

    4、测试

    精确查询结果

     模糊查询----不支持模糊

    好像哪里不对,本文不是要实现模糊搜索吗????

     奥。。。忘了。。。。既然实现了精确查询,那模糊查询很简单,略微改造下就行。

    1、步骤同上,已做,略过

    2、步骤同上,已做,略过

    3、编写过滤器类

    from django_filters.rest_framework import FilterSet
    import django_filters
    from env.models import ServerInfo
    
    
    class ServerInfoFilter(FilterSet):
        """
        ip过滤器,模糊查询
        """
        server_ip = django_filters.CharFilter(field_name='server_ip', lookup_expr='icontains')  # icontains,包含且忽略大小写
    
        class Meta:
            # 指定模型
            models = ServerInfo
            # 指定需要模糊查询的字段
            fields = ['server_ip']

    4、视图类中增加属性  filterset_class

    class ServerInfoList(generics.ListAPIView):
        """
        获取所有服务器信息
        """
        from django.db.models import Q
        # 使用orm的或查询Q相当于SQL的or关键字,查询集为状态为启用和禁用的
        queryset = ServerInfo.objects.filter(Q(status=1) | Q(status=2)).order_by('-update_time')
        serializer_class = ServerInfoSerializers
        # 渲染页面
        # renderer_classes = (renderers.TemplateHTMLRenderer, renderers.JSONRenderer)
        renderer_classes = [renderers.JSONRenderer]
        template_name = 'server_list.html'
        # 精确过滤,不支持模糊查询,需要过滤的字段
        # filter_backends = [DjangoFilterBackend]
        # filterset_fields = ['server_ip', 'app', 'app_port', 'project_name', 'status']
    
        # 模糊匹配查询
        filterset_class = server_info_filter.ServerInfoFilter

    5、测试

     支持模糊匹配,搞定

  •  

标签:第一种,模糊,renderers,server,django,查询,class,drf
From: https://www.cnblogs.com/fan-1994716/p/16914859.html

相关文章

  • drf模糊查询-第二种方法
    jangoFilterBackend或者RestFrameworkFilterBackend在做指定字段查询时,默认为精确查询,如api/v1/brand/brands/?name=huawei可以查到,api/v1/brand/brands/?name=hua是查不......
  • 【Mybatis学习总结六】动态SQL与模糊查询
    六、动态SQL与模糊查询学数据库的时候有学过模糊查询。如:根据姓名模糊匹配和指定年龄区间来查询用户信息:SQL语句可以这样来写:SELECT*FROMd_userWHEREnamelike'%m%'......
  • 【Mybatis学习总结五】实现关联表查询----一对多关联(collection)
    实现关联表查询----一对多关联(collection)一对多需求:即一张表class中又含有多张表(teacher,student)内容。现根据class_id来获取对应的班级信息(包括学生和老师信息)。1......
  • 【Mybatis学习总结四】实现关联表查询----一对一关联(association)
    一、一对一关联建立的数据表class(班级)含有班级信息和teacher(教师)信息,而教师信息在零一张表Teacher中;即class表与Teacher相互关联的;现在需要根据class表的id查询class信息......
  • MSSQL 查询数据库总条数和空间使用情况
    查询所有表对应的数据量1.GROUPSELECTA.NAMEAS表名,MAX(B.ROWS)AS记录条数FROMSYS.SYSOBJECTSASAINNERJOINSYS.SYSINDEXESASBONA.ID=B.IDAND(A.XT......
  • mysql慢查询操作
    MySQL慢查询日志总结慢查询日志概念   MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值......
  • java mybatis查询数据库获取树形结构数据
    数据库数据,每条数据都有code和parent_code,最顶级的parent_code为1实体类importcom.baomidou.mybatisplus.annotation.FieldFill;importcom.baomidou.mybatispl......
  • 外挂系统表查询器
    *************************************************************************ProgramName:ZSDR025*Descriptions:外掛表格資料上傳有权限限制*U......
  • Java开发学习(四十二)----MyBatisPlus查询语句之条件查询
    一、条件查询的类MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合。这个我们在前面都有见过,比如查询所有和分页查询的时候,都有看到......
  • 分页查询总结
    前端做数据分页,至少需要传给后端的关键数据:当前页码:pageNum(需要查第几页的数据,必须前端提供)每页显示数据条数:limit(可前端传,可后端自定义)前端需要的数据,即后端需要查的......