Мне нужно создать временные интервалы в соответствии с количеством песен. Например, s, если в моем плейлисте 5 песен, мы создаем временной интервал слотов по логикам c, 60/5 = 12 минут в этом примере, так как количество песен здесь было 5.
Я также предоставляю start_time и end_time. Вот если я предоставлю start_time = 5:00 am and end_time = 6:00 am, total songs = 5
S1: 5:00 - 5:12
S2: 5:12 - 5:24
S3: 5:24 - 5:36
S4: 5:36 - 5:48
S5: 5:48 - 6:00
Модель состоит из этих трех полей:
class SlotCreate(models.Model):
from_time = models.TimeField(max_length=255, blank=True, null=True)
to_time = models.TimeField(max_length=255, blank=True, null=True)
songs = models.ManyToManyField('Song')
labelling = models.ForeignKey('Labelling',blank=True, null=True)
Я проверяю, существует ли слот, с помощью следующего запроса:
SlotCreate.objects.filter(from_time=from_time,to_time=to_time,labelling=label).exists():
errors.append("The Slot already exists "+"\n")
Проблема здесь в том, что если пользователь предоставляет:
Start_time = 5:00
End_time = 6:00
Total songs = 3
Тогда интервалы уже существуют в указанном выше временном интервале, поскольку S1, S2, S3, S4, S5 уже существуют. Часть кода, с которой я проверяю выше, не может определить этот случай как
S1: 5:00 - 5:20
S1: 5:20 - 5:40
S1: 5:40 - 6:00
Может ли кто-нибудь помочь мне, что мне здесь не хватает в условии?
Обновление 1:
Я написал следующий запрос, но не могу обработать значения после полуночи. Кто-нибудь может предложить некоторую помощь по приведенному ниже запросу, чтобы мы могли проверить, не перекрываются ли слоты, и вызвать ошибку при перекрытии.
SlotCreate.objects.filter(labelling = label).exclude((Q(from_time__gte=dateTimeA.time()) & Q(from_time__gte = dateTimeB.time())) | (Q(to_time__lte = dateTimeA.time()) & Q(to_time__lte = dateTimeB.time()))):