Вы хотите проверить lesson_datetime_start
и lesson_datetime_end
вместе, а не отдельно. Только проверка того, что время не превышает 23:59, не сокращает его, поскольку это может привести к недействительности 2019-05-04 23:00 - 2019-05-05 12:00, даже если это правильный начальный интервал в один час в 11 часов вечера
Для этого добавьте метод clean()
в форму:
def clean(self):
cleaned_data = super().clean()
if self.cleaned_data.get('lesson_datetime_start') \
and self.cleaned_data.get('lesson_datetime_end') \
and self.cleaned_data['lesson_datetime_start'] >= self.cleaned_data['lesson_datetime_end']:
raise ValidationError({'lesson_datetime_end': "End time must be later than start time."})
return cleaned_data
Таким же образом, вы можете добавить валидатор, что продолжительность урока не превышает определенный ожидаемый интервал времени (например, не может быть больше 4 часов), вычитая два поля datetime
и сравнивая их до datetime.timedelta(hours=x)
.
Вы также можете сделать это в своей модели, при условии, что у вас есть модель Lesson
с полями lesson_start
и lesson_end
:
def clean(self):
if self.lesson_start and self.lesson_end and self.lesson_start >= self.lesson_end:
raise ValidationError({'lesson_end': "End time must be later than start time."})