我有一个Django模型,它有一个事件的单独的Datefield和Timefield。有没有办法将其转换为python日期时间对象,以便我可以精确地查询即将发生的事件?目前我只得到第二天的即将到来。
models.py
event_time = models.TimeField()
event_date = models.DateField()
基本上,我可以用一分钟过滤,甚至分开第二个预备吗?
谢谢。
答案 0 :(得分:10)
改为使用DateTimeField
(请参阅文档中的this section)。 Django会自动为您处理转换为datetime.datetime
。
DateField
会产生datetime.date
和datetime.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