2017-02-23 92 views
0

我嘗試爲我的渲染創建一個範圍,但當我使用now()date.today()按日期過濾時,我只有空查詢。爲什麼日期範圍返回空查詢?

models.py:

class Episode(models.Model): 
    date = models.DateTimeField(null=True, default=now) 

我導入好的庫的過程:

from django.utils.timezone import now, timedelta 

我認爲這是個好辦法:

page = 0 
n = now() 
Episode.objects.filter(date__range=[n-timedelta(days=(5*page)), n-timedelta(days=(5*(page+1)))]) 
<QuerySet []> 

但它沒有工作... 有關信息:數據庫有鍵入的情節和值datetime.datetime:

for e in Episode.objects.filter(): 
    print(e.date) 

2017-02-22 19:12:31.351811+00:00 
2017-02-22 19:12:31.418354+00:00 
2017-02-22 19:12:31.468889+00:00 
2017-02-22 19:12:31.524925+00:00 
2017-02-22 19:12:31.599978+00:00 
2017-02-22 19:12:31.680029+00:00 
2017-02-22 19:12:31.744071+00:00 
2017-02-22 19:12:31.803611+00:00 
2017-02-22 19:12:31.872156+00:00 
2017-02-22 22:24:56.733546+00:00 
2017-02-23 19:16:00.600644+00:00 

當我在範圍照片直接使用字符串時,它的工作...

Episode.objects.filter(date__range=['2017-02-22 19:12:31.351811+00:00','2017-02-22 19:12:31.744071+00:00']) 
<QuerySet [<Episode: Episode object>, <Episode: Episode object>, <Episode: Episode object>, <Episode: Episode object>, <Episode: Episode object>, <Episode: Episode object>, <Episode: Episode object>]> 

我嘗試過前初始化變量...

n = now() 
page = 0 
startDate = n-timedelta(days=5*page) 
endDate = n-timedelta(days=5*(page+1)) 
Episode.objects.filter(date__range=[startDate, endDate]) 
<QuerySet []> 

你有一個IDEAR爲什麼我可以使用nowdatetime進行過濾,並且它可以與字符串一起使用?

編輯:查詢

print(Episode.objects.filter(date__range=[startDate, endDate]).query) 
SELECT "table_episode"."id", "table_episode"."card_id", "table_episode"."date", "table_episode"."number", "table_episode"."title", "table_episode"."type_episode", "table_episode"."tag", "table_episode"."url_access" FROM "table_episode" WHERE "table_episode"."date" BETWEEN 2017-02-23 22:46:06.391779 AND 2017-02-18 22:46:06.391779 
<QuerySet []> 
+0

你可以打印查詢集查詢,並檢查提示生成的SQL: '打印Episode.objects.filter(date__range = [N-timedelta(天數=(5 *頁)),正timedelta (days =(5 *(page + 1)))]])。query' – alfredo138923

+0

感謝您的回覆,我不認爲這樣做,我將它添加到主帖子中。 – Buky

+1

'endDate = n-timedelta(days = 5 *(page + 1))'endDate總是小於startDate。檢查條件。希望它有幫助 – alfredo138923

回答

1

感謝@ alfredo138923因爲是h ELP。

我將解釋與解釋發佈給任何需要一天的人。

page = 0 
n = now() 
startDate = n-timedelta(days=5*page)  #more recently date 
endDate = n-timedelta(days=5*(page+1)) #more older date 
Episode.objects.filter(date__range=[endDate, startDate]) #range of 5 days 

我事實上,當你需要篩選使用__range但最近日期必須在第一的位置Seconde系列和oldly日期日期。

page = 0 
n = now() 
Episode.objects.filter(date__range=[n-timedelta(days=(5*(page+1))), n-timedelta(days=(5*page))]) 

相同的代碼,但在一行/查詢。

引用的評論的人誰不讀它的:

__range是調用函數之間的SQL爲其第一個參數是大於或等於和第二一個是小於或等於。 - @iklinac

0

如果您的網頁= 0

startDate = n (as page = 0) 
endDate = n - 5 days 

這讓0結果

之前轉化爲查詢,現在開始日期和結束日期之間的搜索5天range documentation