2010-02-15 59 views
3

有沒有一種方法可以在DateTimeField中獲得不同的小時數?我基本上想要.dates()提供但幾小時的完全相同的東西。Django在日期時間字段中獲得獨特的小時數

我應該說明我正在討論QuerySet方法。我所說的日期()方法在這裏: http://docs.djangoproject.com/en/1.1/ref/models/querysets/#dates-field-kind-order-asc

如果沒有,是否有推薦的已知解決方案?

謝謝。

添加澄清: 我有一個模型稱爲事件與DateTimeField調用start_date。我們需要知道某個特定日期的哪個小時有事件。 比方說,我們範圍縮小到一個特定的月份:

objects = Event.objects.filter(start_date__year=2010, start_date__month=2) 

現在的日期功能能給我的所有具有事件的天AA列表:

distinct_days = objects.dates('start_date', 'day') 

我想是什麼將其縮小到特定的一天,然後獲得一天中發生事件的時間清單。

objects = Event.objects.filter(start_date__year=2010, start_date__month=2, start_date__day=3) 
distinct_hours = objects.times('start_date', 'hour') # This command doesn't exist and am wondering how to do this 

謝謝。

+0

也許你可以描述/顯示你想要做的實際查詢。也許這可以在不使用'dates()'的情況下完成。 –

回答

1

不幸的是,目前沒有一種好的方法來做到這一點,最好的方法是將一些原始SQL與extra()方法結合使用,然後調用distinct()。

+0

我嘗試添加以下內容,但無法從中獲得明確的列表:.extra(select = {'hours':'DATE_FORMAT(start_date,「%% H」)'} ) – mhost

+0

您需要做.extra(stuff).values_list(「hours」,flat = True).distinct() –

+0

這裏是結束查詢集(對象已經過濾到特定的一天): 對象。 extra(select = {'hours':'DATE_FORMAT(start_date,「%% H」)'})。values_list(「hours」,flat = True).distinct()。order_by('hours') – mhost

2

您想獲得datetime對象的小時數嗎?你的意思是哪一個.dates()

hour = instance.yourDateTimeField.hour 
+0

+1,但是你的意思是datetime.datetime.hour(沒有's')?我第二個關於'dates()'的問題。 –

+0

@Jarret Hardie:哦,你的是對的's',謝謝:) –

+0

我在說這個: http://docs.djangoproject.com/en/1.1/ref/models/querysets/#dates- field-kind-order-asc – mhost

0

簡單的解決方案:小時可能存儲在單獨的字段,與unique=True

1

我已經創建了此代碼以便手動執行此操作。

hours = [] 
for h in objects.values('start_date'): 
    hours.append(h['start_date'].hour) 
tempdict = {} 
for x in hours: 
    tempdict[x] = x 
hours = tempdict.values() 
hours.sort() 
相關問題