django_filters实现数据过滤

django_filters实现数据过滤1、视图classUserView(ListAPIView):”””用户列表”””queryset=User.objects.all()serializer_class=UserSerializerfilter_backends=(DjangoFilterBackend,)filter_class=UserMonthFilt…

大家好,又见面了,我是你们的朋友全栈君。

1、视图

class UserView(ListAPIView):
    """用户列表"""
    queryset = User.objects.all()
    serializer_class = UserSerializer
    filter_backends = (DjangoFilterBackend,)
    filter_class = UserMonthFilter  # 指定过滤类

2、过滤类

class RobotFilter(django_filters.FilterSet):
    # 使用过滤:URL?created_start_time=2020_01-20&created_end_time=2020_01-21
    robot_id = django_filters.CharFilter(field_name='id')
    machine_id = django_filters.CharFilter(field_name='machine_id')
    city = django_filters.CharFilter(field_name='city')
    # lookup_expr(可选)为判断条件,field_name(必选)为模型类属性,created_time查询字符串
    created_time= django_filters.CharFilter(field_name='created_at', lookup_expr='startswith')
    created_start_time = django_filters.DateTimeFilter(field_name='created_at', lookup_expr='gt')
    created_end_time = django_filters.DateTimeFilter(field_name='created_at', lookup_expr='lt')
    problem_isnull = django_filters.BooleanFilter(field_name='problem', lookup_expr='isnull')
    name = django_filters.CharFilter(lookup_expr='iexact')  # iexact表示精确匹配, 并且忽略大小写
    author = django_filters.CharFilter(lookup_expr='icontains') #icontains表示模糊查询(包含),并且忽略大小写
    price = django_filters.NumberFilter(look_expr='exact')  #exact表示精确匹配
    task_res_state = django_filters.CharFilter(method="get_task_res_state")
    
    def get_task_res_state(self, queryset, *arg):
        if str(arg[1]) == "0":  # arg[1]=('task_res_state', '0')
            task_res = (1, 2, 3)
        else:
            task_res = (0, 4, 5, 6)
        print(task_res)
        queryset = queryset.filter(task_res__in=task_res)
        return queryset
    class Meta:
        model = Robot
        fields = ['robot_id', 'machine_id', "city", "created_start_time", "created_end_time", 'created_time',
                  'firmware_version', 'state', "robot_type", "hardware_version", "exist_map", 'task_res_state']

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/143578.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • asp:UpdatePanel客户端回传事件管理

    asp:UpdatePanel客户端回传事件管理asp:UpdatePanel客户端回传事件管理Asp:UpdatePanel是在Asp.NetWebForm中的一个局部刷新控件,虽然很好用,但是在使用过程中却发现如果局部刷新的数据需要再次使用页面js进行格式化,页面则会乱套,所以在这里我们需要对UpdatePanel的回传过程进行控制。

  • jni 头文件_java.io.file

    jni 头文件_java.io.file1,cmd切换到应用工程目录下如示例中的D:\zxy\IDCardQualityLib2,执行javah命令,红色部分为sdk平台android.jar路径,蓝色部分为生成的jni类名 D:\zxy\IDCardQualityLib>javah-classpath bin/classes;d:\tool\adt-bundle-windows-x86-20131030\adt-b

  • 操作系统实验一:进程管理(含成功运行C语言源代码)[通俗易懂]

    操作系统实验一:进程管理(含成功运行C语言源代码)[通俗易懂]目录操作系统实验一:进程管理实验目的实验内容操作系统实验一:进程管理1.实验目的1.理解进程的概念,明确进程和程序的区别2.理解并发执行的实质3.掌握进程的创建、睡眠、撤销等进程控制方法2.实验内容用C语言编写程序,模拟实现创建新的进程;查看运行进程;换出某个进程;杀死运行进程等功能。3.实验准备以下将分别介绍①进程的概念,以及进程的各类状态(就绪状态、执行状态、阻塞状态);②进程控制块PCB的作用及内容信息③进程的创建与撤销(????重.

    2022年10月20日
  • mysql 练习题及答案 50道

    mysql 练习题及答案 50道此50题参考出处,题目一样,代码有出入,因为题目比较有意思,都自己做了一次。https://zhuanlan.zhihu.com/p/50662216 –1、查询课程编号为“01”的课程比“02”的课程成绩高的所有学生的学号。–方法1select*fromscoreainnerjoinscorebon(a.s_id=b.s_idanda.c_id…

  • C++ 输入的是1.3变1.29999995问题

    C++ 输入的是1.3变1.29999995问题今天一位粉丝在评论中问到了这个问题,我简单的说了原理和改进方法,将float改为double就可以了,下面我进行详细整理先说一下debug是啥意思马克2号(Harvard Mark II)编制程序的葛丽丝·霍波(Grace Hopper)是一位美国海军准将及计算机科学家,同时也是世界最早的一批程序设计师之一。有一天,她在调试设备时出现故障,拆开继电器后,发现有只飞蛾被夹扁在触点中间,从而…

  • Maven Web报错:org.apache.jasper.JasperException: Unable to compile class for JSP「建议收藏」

    MavenWeb报错:org.apache.jasper.JasperException:UnabletocompileclassforJSP今天被这个问题弄得,拽下了一大把的头发!哭唧唧~~~

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号