Django datefield和timefield到python datetime

fre*_*row 8 python django datetime

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

models.py

event_time = models.TimeField()
event_date = models.DateField()
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Sim*_*ser 11

DateTimeField改用(请参阅文档中的此部分).datetime.datetimeDjango会自动为您处理转换为a .

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未修改,它只是计算新的日期和时间.如您所见,您现在必须自己进行合并,因为两个值都存储在单独的字段中.这就是为什么a DateTimeField是一个更好的选择,如果你有能力修改模型的字段.


Ank*_*haa 6

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

event_full_datetime = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)

修复旧数据库.像这样的脚本的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()
Run Code Online (Sandbox Code Playgroud)