我有一个包含两个字段的模型:
class Event(models.Model):
date = models.DateField(_(u'Date'))
time = models.TimeField(_(u'Time'))
我需要找到所有时间距离当前24小时的对象。
当使用DateTime字段时,我可以做到这一点,但是当字段分开时,我不确定如何实现。谢谢。
我有一个包含两个字段的模型:
class Event(models.Model):
date = models.DateField(_(u'Date'))
time = models.TimeField(_(u'Time'))
我需要找到所有时间距离当前24小时的对象。
当使用DateTime字段时,我可以做到这一点,但是当字段分开时,我不确定如何实现。谢谢。
对于简单情况(虽然不确定是否所有情况都是简单的),这应该可以解决问题:
import datetime
today = datetime.datetime.now()
tomorrow = today + datetime.timedelta(days=1)
qs_today = queryset.filter(
date=today.date(),
time__gte=today.time(),
)
qs_tomorrow = queryset.filter(
date=tomorrow.date(),
time__lt=tomorrow.time(),
)
qs = qs_today | qs_tomorrow
您提到使用DateTimeField
可以实现所需功能,但是现在因为有不同的字段,我了解您的问题是如何将它们组合在一起。
查看DateField文档 - 您的date
变量是datetime.date
实例,类似于TimeFieldtime
是datetime.time
。您可以使用combine()
将其转换为datetime.datetime
。
import datetime as dt
datetime = dt.datetime.combine(date,time)
DateTimeField
相同的日期时间对象。您在问题中提到可以从那里进行24小时后的计算,如果需要明确说明,请在评论中告诉我。
注意:如果其中一个字段为None
,则combine
将失败 - 您声明这不可能发生,因此我没有添加任何错误检查或验证。
def _get_datetime(self):
'''Returns a combination of date and time as a datetime'''
return dt.datetime.combine(self.date,self.time)
datetime = property(_get_datetime)
DateTimeField
相同的行为。您可以使用Q
对象来搜索“当前时间之后的昨天或当前时间之前的今天”:
from django.db.models import Q
from .models import Event
from datetime import datetime, timedelta
def get_event_during_last_day():
now = datetime.now()
today = now.date()
yesterday = (now - timedelta(day=1)).date()
time = now.time()
query_yesterday = Q(date=yesterday, time__gt=time)
query_today = Q(date=today, time__lt=time)
return Event.objects.filter(query_yesterday | query_today)