2012-03-31 80 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()