Сохранение истории путем мягкого удаления строки таблицы

Изначально я жестко удалял строки SQL. Теперь я хочу мягко удалить строку, добавив новый столбец в таблице 'is_active'. если is_active=False, это означает, что строка удалена, и теперь она является частью истории.

Но проблема заключается в других таблицах, где на эту таблицу ссылается внешний ключ. ранее, при удалении этой строки, автоматически удаляется запись из других таблиц (model.cascade). Пример;

Table 1{
id uuid,
is_active bool,
.
.
}

Table2{
id uuid,
fk foreignKey(Table1, on_delete=models.cascade)
}

Table3{
id uuid,
fk foreignKey(Table1, on_delete=models.cascade)
}

Теперь, если я буду мягко удалять таблицу1 (делая is_active=False), то у меня есть следующий вариант,

  1. Add is_active columns to all other tables also which is referencing table1. and follow the same procedure to these tables as for table1.

ISSUE: это будет очень сложная задача, так как некоторые другие таблицы могут указывать на table2, на которую в результате могут ссылаться некоторые другие таблицы. и мы вручную установили is_active=False для table2 и table3.

QS. Есть ли лучший подход для мягкого_удаления таблицы? Например, что-то вроде этого,

Table2{
id uuid,
fk foreignKey(Table1, on_is_active_is_False=set.is_active=False),
is_active bool
}

Вам необходимо написать сигнал для изменения состояния отношений внешних ключей после изменения поля is_active на Table1.

models.py

from django.db.models.signals import post_save

def set_active(sender, instance, **kwargs):
    instance.table2_set.all().update(is_active=instance.is_active)
    instance.table3_set.all().update(is_active=instance.is_active)

post_save.connect(set_active, sender=table1)

Используя сигнал post_save, он будет обновлять все отношения всякий раз, когда изменяется статус is_active. Table2 и Table3 теперь должны отражать значение Table1 при каждом изменении.

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