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

xpa*_*nta 13 django django-models

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

class Event(models.Model):
    date = models.DateField()
    time = models.TimeField()
Run Code Online (Sandbox Code Playgroud)

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

这就是我在做的事情:

events = Event.objects.filter(date__gte=now.date()).filter(time__gte=now.time()).order_by('-date')
Run Code Online (Sandbox Code Playgroud)

哪里 now = datetime.datetime.now()

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

这可能在django吗?

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

Ala*_*air 18

使用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')
Run Code Online (Sandbox Code Playgroud)

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

order_by('-date', '-time')
Run Code Online (Sandbox Code Playgroud)

  • 更新Django 1.5.1:`来自django.db.models import Q`但如果您只使用DateTimeField,则不需要这样做:`events = Event.objects.filter(date__gt = datetime.now()).order_by(' - 日期")` (3认同)