067:【Django数据库】ORM查询条件详解-range 【Django数据库】ORM查询条件详解-range
range:
判断某个 field 的值是否在给定的区间中。⽰例代码如下:
# views.py⽂件内容:
django项目实例from datetime import datetime
from django.utils.timezone import make_aware
def index(request):
start_time = make_aware(datetime(year=2019, month=1, day=7, hour=21, minute=0, second=0 ))
end_time = make_aware(datetime(year=2019, month=1, day=7, hour=22, minute=0, second=0 ))
articles = Article.objects.filter(create_time__range=(start_time, end_time))
print(articles.query)
print(articles)
return HttpResponse("success")
# models.py⽂件内容:
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
category = models.ForeignKey('Category', on_delete=models.CASCADE, null=True)
# category = models.ForeignKey('Category', on_delete=models.CASCADE, null=True, related_query_name=articles)
create_time = models.DateTimeField(auto_now_add=True, null=True) # 主要是这⾏
以上代码的意思是提取所有发布时间在 2019/1/7 21点 到 22点之间的⽂章。将翻译成以下的 SQL 语句:
SELECT `article`.`id`, `article`.`title`, `article`.`content`, `article`.`category_id`, `article`.`create_time` FROM `article` WHERE `article`.`create_time` BETWEEN 2019-01-07 13:00:00 AND 2019-01-07 14:00:00
需要注意的是,以上提取数据,不会包含最后⼀个值。也就是不会包含 2019/1/7 22点 的⽂章。⽽且另外⼀个重点,因为我们在settings.py 中指定了 USE_TZ=True ,并且设置了 TIME_ZONE='Asia/Shanghai' ,因此我们在提取数据的时候要使⽤
django.utils.timezone.make_aware 先将 datetime.datetime 从 navie 时间转换为 aware 时间。 make_aware 会将指定的时间转换为TIME_ZONE 中指定的时区的时间。
实例截图如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论