模型的定义,models.py文件中示例代码如下:
  1. from django.db import models
  2. # 在定义模型的类时,一定要继承models.Model
  3. class Category(models.Model):
  4. # 设置字段的最大长度为100
  5. name = models.CharField(max_length=100)
  6. # 重新定义该类的一些属性
  7. class Meta:
  8. # 自定义表名
  9. db_table = 'category'
  10. class Article(models.Model):
  11. title = models.CharField(max_length=100)
  12. content = models.TextField()
  13. # 设置删除的时候为级联删除
  14. category = models.ForeignKey('Category', on_delete=models.CASCADE, null=True)
  15. # 设置auto_now_add=True,就会将所有数据的该属性的初始值设置为添加数据时的时间,并且允许为空值
  16. create_time = models.DateTimeField(auto_now_add=True, null=True)
  17. # 重写__str(self)方法
  18. def __str__(self):
  19. return "<(Article: id: %s,title: %s, content: %s)>" % (self.id, self.title, self.content)
  20. # 重新定义该类的一些属性
  21. class Meta:
  22. db_table = 'article'

range:判断某个field的值是否在给定的区间中。示例代码如下:

  1. from .models import Article, Category
  2. from django.http import HttpResponse
  3. from datetime import datetime
  4. def index(request):
  5. # 设置一个开始日期,采用datetime()方法,并且为参数传递相应的值
  6. start_date = datetime(year=2020, month=2, day=5, hour=2)
  7. # 设置一个结束日期
  8. end_date = datetime(year=2020, month=2, day=5, hour=23)
  9. # 使用range查询条件查找在一定时间段的文章
  10. # 为模型所形成的表的字段规定相应的查询条件,可以使用“字段名__查询条件”=‘value’,进行查询
  11. articles = Article.objects.filter(create_time__range=(start_date,end_date))
  12. # 打印出django底层执行的sql语句
  13. print(articles.query)
  14. # 打印出符合时间段的QuerySet对象
  15. print(articles)
  16. 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文件中进行以下修改:
  1. # 从django.utils.timezone模块中导入make_aware()函数
  2. from django.utils.timezone import make_aware
  3. # 执行make_aware()函数将navie time 转换为active time。
  4. start_date = make_aware(datetime(year=2020, month=2, day=5, hour=2))
  5. 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的更多相关文章

  1. ORM查询条件

    模板: from django.db import models class Article(models.Model): title = models.CharField(max_length=20 ...

  2. 68.ORM查询条件:date,time,year,week_day等

    1. date: 首先查看数据库中article表的信息,由表中的create_time字段可以看出时间为2020.2.5 打印出查询的结果: <QuerySet []>:但是查询的结果为 ...

  3. 69.ORM查询条件:isnull和regex的使用

    首先查看数据库中的article表的数据: 定义模型的文件models.py中的示例代码如下: from django.db import models class Category(models.M ...

  4. 64.Python中ORM查询条件:in和关联模型

    定义模型的models.py文件中示例代码如下: from django.db import models class Category(models.Model): name = models.Ch ...

  5. 65.ORM查询条件:gte,gt,lte和lt的使用

    1. gte: 代表的是大于等于,英文全称为:great than equal.举例:找到文章id大于等于3等文章,示例代码如下: 定义模型的示例代码如下: from django.db import ...

  6. Django(17)orm查询操作

    前言 查找是数据库操作中一个非常重要的技术.查询一般就是使用filter.exclude以及get三个方法来实现.我们可以在调用这些方法的时候传递不同的参数来实现查询需求.在ORM层面,这些查询条件都 ...

  7. django orm 的查询条件

    Django的ORM查询操作: 查询数据库操作是一个非常重要的技术.在Django中,查询一般就是使用filter.exclude.get三个方法来实现,在调用这些方法的时候传递不同的查询条件来实现复 ...

  8. django ORM常用查询条件

    假设有一个模型 class Article(models.Model): title=models.CharField(max_length=50) content=models.TextField( ...

  9. ORM查询简化

    文章出处 https://www.cnblogs.com/wupeiqi/articles/6216618.html 字段 常用字段 AutoField(Field) - int自增列,必须填入参数 ...

随机推荐

  1. 厉害了!SpringBoot是如何动起来的!

    程序入口 SpringApplication.run(BeautyApplication.class, args); 执行此方法来加载整个SpringBoot的环境. 1. 从哪儿开始? Spring ...

  2. 四 Hibernate的一级缓存&事务管理及其配置

    持久态对象: 自动更新数据库,原理是一级缓存. 缓存:是一种优化的方式,将数据存入内存,从缓存/内存中获取,不用通过存储源 Hibernate框架中提供了优化手段:缓存,抓取策略 Hibernate中 ...

  3. 攻防世界--web新手练习区(1)

      1. 题目描述:X老师想让小明同学查看一个网页的源代码,但小明却发现鼠标右键不管用了.  http://111.198.29.45:53629 通过阅读题目描述分析,我们需要查看源码,但是鼠标右键 ...

  4. HihoCoder第二周与POJ3630:Trie树的建立

    这又是两道一样的题,都是建立trie树的过程. HihoCoder第二周: 这里其实逻辑都很简单,主要在于数据结构struct的使用. #include <iostream> #inclu ...

  5. vue+element 递归上传图片

    直接上代码. <template>   <div>     <el-upload       action="http://localhost:3000/pic ...

  6. win10提示防火墙没有法更改某些设置的处理办法

    一.问题发现 远程链接电脑时间发现远程链接失败 提问在“控制面板” 中打开“程序” 列表中启用“windows 防火墙” . 按照提示启用防火墙 ,发现启用或关闭页面不可编辑 二.原因是防火墙Wind ...

  7. R分析实现对招聘网站薪资预测分析

    1.首先确定数据分析目标——薪酬受哪些因素影响 确定变量: 因变量:薪资 自变量:(定性)-- 公司类别.公司规模.地区.行业类别.学历要求.软件要求. (定量)-- 经验要求(数值型) 分析目标:建 ...

  8. PreparedStatement 和 Statement 的区别(推荐使用PreparedStatement)

    PreparedStatement与Statement在使用时的区别: 1.Statement: String sql=" "; executeUpdate(sql) 2. Pre ...

  9. 前端性能优化----reflow(回流)和repaint(重绘)

    什么是reflow和repaint(原文链接:http://www.cnblogs.com/Peng2014/p/4687218.html) reflow:例如某个子元素样式发生改变,直接影响到了其父 ...

  10. FPGA调试技巧(Quartus 15.1 Standard平台)

    1.在SignalTap II Logic Analyzer(stp)观测信号,需要将待观察寄存器.网络节点的综合器属性设为synthesis noprune和synthesis keep,防止综合器 ...