django:正确检索日期和时间比现在大的数据

时间:2012-03-03 20:46:39

标签: django django-models

我有一个描述这样一个事件的模型:

class Event(models.Model):
    date = models.DateField()
    time = models.TimeField()

我想检索所有未来事件(即日期大于now.date())。但是,如果今天是今天,我想检索今天的事件,其时间大于now.time()

这就是我在做的事情:

events = Event.objects.filter(date__gte=now.date()).filter(time__gte=now.time()).order_by('-date')

其中now = datetime.datetime.now()

但这是错误的,因为如果唯一的事件是明天而且它的时间小于当前时间(例如明天的事件是09:00,今天是19:00),它会给我一个空集。

这可能在django吗?

PS:我想避免迭代整个集合。

1 个答案:

答案 0 :(得分:15)

使用Q对象,允许您使用OR语句进行查询。

from django.db.models import Q
Events = Event.objects.filter(Q(date=now.date(),time__gte=now.time())|Q(date__gt=now.date())).order_by('-date')

请注意,您可能还希望对time字段进行排序:

order_by('-date', '-time')