Django model override save function raise error if an object is already active
В моей Django модели я хочу проверить инвестиции перед сохранением, если у этой инвестиции значение поля active установлено в true, а другая инвестиция, принадлежащая той же компании, уже активна, то я должен выдать ошибку, si бизнес-правило - только одна активная инвестиция/компания :
Вот мой код :
def save(self, *args, **kwargs):
if self.active:
qs = type(self).objects.filter(active=True).filter(startup=self.startup)
# TODO a bug here when unchecking then checking a unique active investment ==> error raised
if qs:
raise ValidationError(message="An active investment already exists for this startup")
super(Investment, self).save(*args, **kwargs)
Мой код вроде работает, однако я нашел ошибку в Django admin, на самом деле если инвестиция активна и является единственной активной для этого стартапа, когда я снимаю галочку и снова ставлю галочку в активном чекбоксе, возникает ошибка, хотя я не добавляю активный объект и не обновляю его, я просто нажимаю на чекбокс дважды!!!
Ну я уже работал над валидацией модели, вам нужно подтвердить ваши инвестиции в вашу модель, есть встроенный валидатор django https://docs.djangoproject.com/en/3.2/ref/validators/