在代码库中实现软删除的最佳方法是什么(特别是Django项目)?
我认为最简单的方法是简单地添加:
is_deleted = models.BooleanField(default=False)
到实现softDeleteObject
的超类,然后覆盖delete()
以在相关对象上设置适当的标志。相关对象还需要从同一个超类继承。
替代方法是删除原始文件,并将其作为存档对象的数量,该对象是已删除对象的表示。
第一个似乎具有更大程度的简单性,但确实需要一些广泛的覆盖 - 例如,必须重写User
以确保所有已删除对象的外键关系仍然存在,然后删除用户并没有硬删除所有软删除的对象。
第二个可以使用pre_delete信号实现,该信号触发代理对象的创建。这又有一些优点(不需要覆盖所有delete()
方法),但确实需要实现项目中使用的模型的存档版本。
哪个更好,还有其他选择吗?