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/

Вернуться на верх