请教 Django 中如何做 soft delete ?
0

最近有做软删除的需求,但是浏览了一波网上的资料后发现按照已有方法去做貌似总会有不完善的地方,比如通过对基类模型添加一个标志位(is_delete),维护起来貌似比较啰嗦。

想问问大家在软删除这块有没有好的实践思路?

alphanow
最佳答案

@PJHubs 通常从需求出发,软删除对应的通常是特殊意义,比如条目停用和失效,这种情况设置对应的状态标志位,数据永久储存。如果担心数据库性能,应该定期归档冷数据并转移储存。如果是确实需要物理删除,也可以使用标志位暂缓删除。如果未来可能恢复,使用数据库备份和快照。

1个月前
讨论数量: 6
alphanow

创建同样结构的数据库,把删除条目移入

1个月前
PJHubs

@alphanow 所以您的意思是说,当需要进行删除的时候,先把原库内容删除,然后把该条数据移入到新库中?

1个月前
alphanow

@PJHubs 先拷贝再删除,事务提交。

1个月前
PJHubs

@alphanow 嗯,我觉得这样也是 OK 的,但是一次逻辑涉及到了两次 DB 操作,如果涉及到联级操作,次数会更多。还有了解到通过加 flag 标志位的做法,但是又觉得加标志位的做法如果用户确认要删除的内容多于留存的内容,也会造成数据冗余,想知道您的更多看法 :bowtie:

1个月前
alphanow

@PJHubs 通常从需求出发,软删除对应的通常是特殊意义,比如条目停用和失效,这种情况设置对应的状态标志位,数据永久储存。如果担心数据库性能,应该定期归档冷数据并转移储存。如果是确实需要物理删除,也可以使用标志位暂缓删除。如果未来可能恢复,使用数据库备份和快照。

1个月前
PJHubs

@alphanow 明白了,非常感谢!

1个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!