2012-03-31 55 views
6

我有一個單獨的Datefield和Timefield的事件的Django模型。有沒有辦法將它轉換爲Python日期時間對象,以便我可以以某種精度查詢即將發生的事件?目前我只能得到第二天的即將到來的。Django datefield和時間字段python日期時間

models.py

event_time = models.TimeField() 
event_date = models.DateField() 

基本上,可予以分鐘過濾,或者甚至裂開第二precition?

謝謝。

+1

不知道爲什麼,這是downvoted:/ – 2012-03-31 09:31:40

+0

我有被downvoted沒有問題,但我肯定沒有「沒有顯示出研究工作」,我不會被張貼到SO。問題是我想避免改變數據庫模型,至少現在,我不知道如何查詢這兩個字段。我可以定義,事件類中,是這樣的: 高清ev_datetime(個體經營): 回報datetime.datetime.combine(self.event_date,self.start) 後來我做不到查詢.filter(event__ev_datetime__gt = NOW)。這基本上是我的問題。 – freethrow 2012-03-31 20:40:44

回答

9

改爲使用DateTimeField(文檔中參見this section)。轉換爲datetime.datetime由Django自動處理。

A DateField導致datetime.datedatetime.time對象。您可以使用replace將這些值合併到一個更新的date

 
>>> today = datetime.datetime.today() 
>>> today 
datetime.datetime(2012, 3, 31, 11, 6, 5, 182371) 
>>> time = datetime.time(11, 30) 
>>> today.replace(hour=time.hour, minute=time.minute) 
datetime.datetime(2012, 3, 31, 11, 30, 5, 182371) 

注意,最終date有11.30隨着時間的現在。還要注意today沒有修改,它只是計算一個新的日期和時間。正如你所看到的,你現在必須自己進行合併,因爲兩個值都存儲在不同的字段中。這就是爲什麼一個DateTimeField是一個更好的選擇,如果你有能力修改模型的領域。

4

你應該像合併日期時間字段一樣添加新字段。更好的表現。

event_full_datetime = models.DateTimeField() 

修復舊數據庫。對於像這樣的腳本的shell。

for obj in YourModel.objects.all(): 
    obj.event_full_datetime = datetime.datetime(obj.event_date.year,obj.event_date.month, obj.event_date.day, obj.event_time.hour, obj.event_time.minut, obj.event_time.second) 
    obj.save()