У меня есть 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
, можно вычислить состояние вызова по данной дате, d
(известно, что между start
и end
):
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 для своей базы данных, если что-то изменится. Есть мысли?