Вы можете сделать это несколькими способами
Метод -1: Переопределить метод save()
для модели Period
как
<b>from django.core.exceptions import ValidationError</b>
class Period(models.Model):
number = models.PositiveIntegerField(primary_key=True)
start_time = models.TimeField()
end_time = models.TimeField()
<b>def save(self, *args, **kwargs):
if self.end_time < self.start_time:
raise ValidationError("some message")
super().save(*args, **kwargs)</b>
Метод -2: Переопределить clean()
метод модели
<b>from django.core.exceptions import ValidationError</b>
class Period(models.Model):
number = models.PositiveIntegerField(primary_key=True)
start_time = models.TimeField()
end_time = models.TimeField()
<b>def clean(self):
super().clean() # calling default cleaning
if self.end_time < self.start_time:
raise ValidationError("some message")</b>
Метод - 3: Переопределить метод full_clean()
<b>from django.core.exceptions import ValidationError</b>
class Period(models.Model):
number = models.PositiveIntegerField(primary_key=True)
start_time = models.TimeField()
end_time = models.TimeField()
<b>def full_clean(self, exclude=None, validate_unique=True):
super().full_clean(exclude=None, validate_unique=True) # calling default full_clean
if self.end_time < self.start_time:
raise ValidationError("some message")</b>
Ссылка
1. Model.clean () - Django doc
2. Model.save () - Django doc
3. Model.full_clean () - Django doc