我有一个描述这样一个事件的模型:
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:我想避免迭代整个集合。
答案 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')