【Django數據庫】ORM查詢條件詳解-range
range:
判斷某個 field 的值是否在給定的區間中。示例代碼如下:
# views.py文件內容:
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 中指定的時區的時間。
實例截圖如下: