67.ORM查询条件:range的使用,使用make_aware将navie time 转换为aware time
模型的定义,models.py文件中示例代码如下:
from django.db import models
# 在定义模型的类时,一定要继承models.Model
class Category(models.Model):
# 设置字段的最大长度为100
name = models.CharField(max_length=100)
# 重新定义该类的一些属性
class Meta:
# 自定义表名
db_table = 'category'
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
# 设置删除的时候为级联删除
category = models.ForeignKey('Category', on_delete=models.CASCADE, null=True)
# 设置auto_now_add=True,就会将所有数据的该属性的初始值设置为添加数据时的时间,并且允许为空值
create_time = models.DateTimeField(auto_now_add=True, null=True)
# 重写__str(self)方法
def __str__(self):
return "<(Article: id: %s,title: %s, content: %s)>" % (self.id, self.title, self.content)
# 重新定义该类的一些属性
class Meta:
db_table = 'article'
range:判断某个field的值是否在给定的区间中。示例代码如下:
from .models import Article, Category
from django.http import HttpResponse
from datetime import datetime
def index(request):
# 设置一个开始日期,采用datetime()方法,并且为参数传递相应的值
start_date = datetime(year=2020, month=2, day=5, hour=2)
# 设置一个结束日期
end_date = datetime(year=2020, month=2, day=5, hour=23)
# 使用range查询条件查找在一定时间段的文章
# 为模型所形成的表的字段规定相应的查询条件,可以使用“字段名__查询条件”=‘value’,进行查询
articles = Article.objects.filter(create_time__range=(start_date,end_date))
# 打印出django底层执行的sql语句
print(articles.query)
# 打印出符合时间段的QuerySet对象
print(articles)
return HttpResponse('success !')
查看打印出的结果:
SELECT article.id, article.title, article.content, article.category_id, article.create_time FROM article WHERE article.create_time BETWEEN 2020-02-05 02:00:00 AND 2020-02-05 23:00:00
<QuerySet [<Article: <(Article: id: 1,title: Hello, content: 你好)>>, <Article: <(Article: id: 2,title: Hello World, content: 大家好)>>, <Article: <(Article: id: 3,title: 钢铁是怎样炼成的, content: 你好
)>>, <Article: <(Article: id: 4,title: 中国吸引力, content: 精彩极了)>>]>
此时出现警告信息:RuntimeWarning: DateTimeField Article.create_time received a naive datetime (2020-02-05 23:00:00) while time zone support is active.RuntimeWarning),意思是:模型Article的create_time字段收到了一个navie time(即幼稚的时间,不知道自己处于哪个时区),但是时区支持的是active time(知道自己是哪个时区的时间)。
解决警告信息的操作:在项目的settings.py文件中,将USE_TZ = True设置为True,默认情况下为True;将TIME_ZONE = 'UTC',设置当前所处的时区,或者是你的项目所运行的时区,当前设置为TIME_ZONE = 'Asia/Shanghai'。并且在views.py文件中进行以下修改:
# 从django.utils.timezone模块中导入make_aware()函数
from django.utils.timezone import make_aware
# 执行make_aware()函数将navie time 转换为active time。
start_date = make_aware(datetime(year=2020, month=2, day=5, hour=2))
end_date = make_aware(datetime(year=2020, month=2, day=5, hour=23))
之后再次运行项目:
SELECT article.id, article.title, article.content, article.category_id, article.create_time FROM article WHERE article.create_time BETWEEN 2020-02-04 18:00:00 AND 2020-02-05 15:00:00 : 此时我们的时间就会变成“Asia/Shanghai”时区的时间。

总结:在提取数据的时候要使用django.utils.timezone.make_aware 先将datetime.datetime 从naive时间转变为aware时间,make_aware会将给定的时间转换为TIME_ZONE中指定的失去的时间。
67.ORM查询条件:range的使用,使用make_aware将navie time 转换为aware time的更多相关文章
- ORM查询条件
模板: from django.db import models class Article(models.Model): title = models.CharField(max_length=20 ...
- 68.ORM查询条件:date,time,year,week_day等
1. date: 首先查看数据库中article表的信息,由表中的create_time字段可以看出时间为2020.2.5 打印出查询的结果: <QuerySet []>:但是查询的结果为 ...
- 69.ORM查询条件:isnull和regex的使用
首先查看数据库中的article表的数据: 定义模型的文件models.py中的示例代码如下: from django.db import models class Category(models.M ...
- 64.Python中ORM查询条件:in和关联模型
定义模型的models.py文件中示例代码如下: from django.db import models class Category(models.Model): name = models.Ch ...
- 65.ORM查询条件:gte,gt,lte和lt的使用
1. gte: 代表的是大于等于,英文全称为:great than equal.举例:找到文章id大于等于3等文章,示例代码如下: 定义模型的示例代码如下: from django.db import ...
- Django(17)orm查询操作
前言 查找是数据库操作中一个非常重要的技术.查询一般就是使用filter.exclude以及get三个方法来实现.我们可以在调用这些方法的时候传递不同的参数来实现查询需求.在ORM层面,这些查询条件都 ...
- django orm 的查询条件
Django的ORM查询操作: 查询数据库操作是一个非常重要的技术.在Django中,查询一般就是使用filter.exclude.get三个方法来实现,在调用这些方法的时候传递不同的查询条件来实现复 ...
- django ORM常用查询条件
假设有一个模型 class Article(models.Model): title=models.CharField(max_length=50) content=models.TextField( ...
- ORM查询简化
文章出处 https://www.cnblogs.com/wupeiqi/articles/6216618.html 字段 常用字段 AutoField(Field) - int自增列,必须填入参数 ...
随机推荐
- 「CF161B」Discounts
传送门 Luogu 解题思路 贪心地想一想,我们肯定要让凳子去给价格越高的商品打半价,那么我们就先按照价格排序,但是要优先把凳子排在前面. 然后我们发现一条凳子肯定只能给价格小于等于它本身的物品打半价 ...
- PYTHON __main__
#importby.py if __name__ =='__main__': print '>>>>>>>1' if __name__ =="imp ...
- 利用uboot下载引导Kernel(TFTP)以及挂载网络Rootfs(NFS)
背景: 在嵌入式开发中,经常需要对系统的各个部分进行修改.倘若每次修改都烧写到板子中,一来浪费时间,其次影响存储介质寿命. 所以,需要一些手段来避免此类问题. 概览: 编译uboot 将uboot写入 ...
- 再次实践 MySQL chart【转】
学习了 chart 结构和模板的知识后,现在重新实践一次 MySQL chart,相信会有更多收获. chart 安装前的准备 作为准备工作,安装之前需要先清楚 chart 的使用方法.这些信息通常记 ...
- 51nod 1163:最高的奖励 优先队列
1163 最高的奖励 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励.在结束时间之前完成该 ...
- 小程序包大小超过2M的解决方法
小程序的包被限制在2M以下, 超出的时候点击预览, 发现报错: Error: 代码包大小为 3701 kb,上限为 2048 kb,请删除文件后重试 1. 优化代码, 删除掉不用的代码 2. 图片压缩 ...
- nuxt.js 初始化 npm run dev 报错
在初始化 npm install 了基本依赖后: npm run dev 报错: error in ./server/index.js Module build failed: Error: Plug ...
- mongodb- 备份和导入备份
一.使用 mongodump 命令备份数据 mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表 -o 文件存放路径 参数说明: -h 指明数据库宿主机 ...
- 前端IT攻城狮--网址搜藏(-- 欢迎留言补充 --)
一. 插件 1.validator: https://validator.niceue.com/docs/ (一款专业表单验证插件) 2.jQuery Tabs-Eas ...
- Java虚拟机05.1(各种环境下jvm的参数如何调整?)
cmd下 eclipse下 tomcat下 cmd下指定jvm参数 在cmd下执行Java程序可以通过如下方式之地需要配置的Java 虚拟机参数: 这里只是指定了对初始为2M,新生代为1M,堆最大值为 ...