【发布时间】:2020-08-14 00:19:22
【问题描述】:
我有一个 django 模型,它描述了两个日期之间的周期性状态。它看起来像:
class OnCallCycle(models.Model):
crew = models.ForeignKey(Crew, on_delete=models.CASCADE)
start = models.DateField()
end = models.DateField()
cycle = models.CharField(max_length=255)
其中start 和end 是周期的包含开始和结束日期,cycle 是一个字符串,表示每天使用一个字符的待命状态周期。例如,如果您有一个 12 天的周期,其中前 6 天开启(由 P 表示),最后 6 天关闭(由 N 表示,cycle 看起来像:PPPPPPNNNNNN . 如果start 和end 之间的天数大于周期的长度,它会重复。因此,给定一个 OnCallCycle 实例,occ,可以计算给定日期的 on call 状态,@ 987654332@(已知介于start和end之间)by:
delta = (d-occ.start).days
status = occ.cycle[delta % len(occ.cycle)]
有没有办法在给定日期d 的查询中执行此操作?我想做这样的事情:
active_cycles = OnCallCycle.objects.filter(
start__lte=d,
end__gte=d
).filter(
# Find all OnCallCycles where the cycle status for date d is not 'N'
)
我正在为我的数据库使用 Postgres,如果这有什么改变的话。有什么想法吗?
【问题讨论】:
标签: python django django-queryset