2010-02-15 30 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() 
相关问题