2010-05-05 154 views
3

在我的意見,我有s_date=20090106e_date=20100106查詢時間戳字段在Django

該模型被定義爲

 class Activity(models.Model): 
      timestamp = models.DateTimeField(auto_now_add=True) 

如何查詢上述信息提交的時間戳按以下格式的日期。

Activity.objects.filter(timestamp>=s_date and timestamp<=e_date) 

感謝.....

回答

6

你有你的日期轉換爲datetime.datetime類的一個實例。最簡單的方法來做你的情況是:

import datetime 

# 
# This creates new instace of `datetime.datetime` from a string according to 
# the pattern given as the second argument. 
# 
start = datetime.datetime.strptime(s_date, '%Y%m%d') 
end = datetime.datetime.strptime(e_date, '%Y%m%d') 

# And now the query you want. Mind that you cannot use 'and' keyword 
# inside .filter() function. Fortunately .filter() automatically ANDs 
# all criteria you provide. 
Activity.objects.filter(timestamp__gte=start, timestamp__lte=end) 

享受!

+1

謝謝........................ – Hulk 2010-05-05 09:13:03

+0

不可以。您不能使用> =和<=進行過濾。過濾器參數是關鍵字,不是表達式。 -1。 – 2010-05-05 10:31:42

+1

有效的點。更新。 – Bartosz 2010-05-05 10:35:30

2

這裏有一種方法:

s_date = datetime.strptime('20090106', '%Y%m%d') 
e_date = datetime.strptime('20100106', '%Y%m%d') 
Activity.objects.filter(timestamp__gte=s_date, timestamp__lte=e_date) 

注意,首先你需要使用strptime到您的字符串日期轉換爲蟒蛇datetime對象。其次,您需要使用gtelte方法來形成django查詢。