Показать статистику
0 голосов
от (2.7тыс. баллов)

Я хочу развернуть способ активной/неактивной модели без ее удаления, например, в модели пользователя, в которой есть поле is_active , в котором мы можем деактивировать пользователя, поэтому я хочу сделать то же самое со всей моделью.

Например, если я сниму флажок is_active в модели продуктов, эта модель исчезнет! и все отношение к модели продуктов было альтернативой None.

225 просмотров 1 ответов

1 Ответ

0 голосов
от (26.4тыс. баллов)

Возможно, вы можете создать класс BaseModel со свойством is_active, от которого наследуются все остальные ваши модели.

Затем вы захотите переопределить метод delete в BaseModel, чтобы при вызове удаления он деактивировал его. Вы также можете добавить функцию really_delete , которая вызывает обычную функцию удаления, если вы действительно хотите удалить ее из БД.

class BaseModel(models.Model):
    class Meta:
        abstract = True
    is_active = models.BooleanField(default=True)

    def delete(self):
        self.is_active = False
        self.save()

    def undelete(self):
        self.is_active = True
        self.save(request=request)

    def really_delete(self):
        super().delete()
...