Есть модель:
class Bus(models.Model):
name = models.CharField(max_length=50, verbose_name='Номер маршрута', unique=True)
from_city = models.ForeignKey(City, verbose_name='Откуда', on_delete=models.CASCADE, related_name="from_city")
to_city = models.ForeignKey(City, verbose_name='Куда', on_delete=models.CASCADE, related_name="to_city")
travel_time = models.IntegerField(verbose_name='Время в пути')
По условию, может быть несколько маршрутов из одного города в другой, но с разными номерами и разным временем в пути. Т.е. не может быть двух маршрутов из А в Б, с одинаковым временем в пути.
Я создал метод clean
внутри модели, который проверяет наличие одинаковых по времени маршрутов из п. А в п. Б, и при наличии полного совпадения, вызывает ошибку:
def clean(self):
if Bus.objects.filter(from_city=self.from_city, to_city=self.to_city, travel_time=self.travel_time).exists():
raise ValidationError('Измените время в пути.')
Этот метод отлично работает при создании нового маршрута, вопросов нет. Но! При редактировании уже имеющегося маршрута, в случае изменения номера маршрута, также выкидывается исключение! Т.е. изменяемый маршрут уже воспринимается как новый и проходит проверку, вместо того, чтобы лишь пересохранить его с новым номером. Подскажите, плз, как это побороть?
Спасибо!