Django datefield和timefield到python datetime

时间:2012-03-31 08:59:07

标签: python django datetime

我有一个Django模型,它有一个事件的单独的Datefield和Timefield。有没有办法将其转换为python日期时间对象,以便我可以精确地查询即将发生的事件?目前我只得到第二天的即将到来。

models.py

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

基本上,我可以用一分钟过滤,甚至分开第二个预备吗?

谢谢。

3 个答案:

答案 0 :(得分:10)

改为使用DateTimeField(请参阅文档中的this section)。 Django会自动为您处理转换为datetime.datetime

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是更好的选择。

答案 1 :(得分:5)

你应该像合并日期时间字段一样添加新字段。更好的性能。

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()

答案 2 :(得分:0)

如果您需要存储D(未知)时间,则可以在计算属性中使用NULL

datetime.combine