我有票型。我需要列出来自特定节目的门票,这些门票也已经购买或者现在和booked_at
之间的时差不到5分钟。
class Ticket(models.Model):
show = models.ForeignKey(Show)
seat = models.ForeignKey(Seat)
user = models.ForeignKey(User)
booked_at = models.DateTimeField(default=timezone.now)
bought = models.BooleanField(default=False)
unavailable = Ticket.objects.filter(show=show).filter(Q(bought=True) | Q(booked_at = ????))
如何查询now
和booked_at
字段之间的差异,以检查其是否小于/大于X分钟?
答案 0 :(得分:2)
您可以尝试以下操作:
import datetime
booked_at__gt=datetime.datetime.now()-datetime.timedelta(minutes=5)
答案 1 :(得分:2)
__range
lookup可用于选择指定范围内的模型实例,包括日期和时间。
将其与datetime.timedelta
相结合,你几乎可以写下你需要的所有内容:
from django.utils import timezone
from datetime import timedelta
within_5_minutes = timezone.now() - timedelta(seconds=300)
unavailable = Ticket.objects.filter(
show=show
).filter(
Q(bought=True) | Q(booked_at__range=(within_5_minutes, timezone.now())
)