Сохранение истории путем мягкого удаления строки таблицы
Изначально я жестко удалял строки 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), то у меня есть следующий вариант,
- 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
при каждом изменении.