Django项目单字段的区间查询

2023-10-30 15:15

本文主要是介绍Django项目单字段的区间查询,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Django项目中会碰到一些需求就是查询某个表中的一些字段从某日到某日的数据,而且是对但字段查询这个时候我们有两两种方法解决

单字段类型是DateTimeField的
查询日期范围的 这个时候在filter.py里面重写DateTimeFromToRangeFilter,为什么要重写呢?
因为我们做区间查询 起始与结束时间两个日期当天的数据也需要的,如果不重写的话起止两天当天的数据是没有的,它的查询规则是<=没有>=这个时候我们就需要去重写,在获得结束日期的时候给它加一天日期即可达到效果>=
注意重写这个方法URL必须按照规定前缀后缀是 _after 和 _before

	http://192.168.31.14:8000/gt_computer/?create_time_after=2023-09-13&create_time_before=2023-09-13

filters.py

	class CustomDateTimeFromToRangeFilter(filters.DateTimeFromToRangeFilter):def filter(self, qs, value):if value and value.stop:new_value = slice(value.start, value.stop + timedelta(days=1))return super().filter(qs, new_value)return super().filter(qs, value)class ComputerFileter(filters.FilterSet):create_time = CustomDateTimeFromToRangeFilter()class Meta:model = ComputerStatusRecordfields = '__all__'

serializers.py

	class ComputerSerializer(ModelSerializer):create_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True)	# 注意重写之后需要添加read_only要不然models.py里面的设置的属性没用了class Meta:model = ComputerStatusRecordfields = "__all__"

在这里插入图片描述
方法二
上面的方法单指的是时间字段,方法二可以指认到数字及时间都可以匹配,就是当我们get请求进来都会走到get_queryset,这个时候我们可以重写它返回指定的内容做区间查询即可。

这个时候我们就不需要指定固定前后缀都可以使用

views.py

    def get_queryset(self):queryset = super().get_queryset()filters = {}for field_name in ['sum_number', 'over_kill_number', 'miss_number',		# 需要区间查询的字段'over_kill_rate', 'miss_rate']:after = self.request.query_params.get(f'{field_name}_after')	# 可以根据自己的需求而定before = self.request.query_params.get(f'{field_name}_before')if after and before:filters[f'{field_name}__gte'] = after		filters[f'{field_name}__lte'] = beforeif filters:queryset = queryset.filter(**filters)	# 区间查询return queryset

在这里插入图片描述
技术小白记录学习过程,有错误或不解的地方请指出,如果这篇文章对你有所帮助请点赞 收藏+关注 期待您的关注,谢谢支持!

这篇关于Django项目单字段的区间查询的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/308795

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路