Django 和软删除 : Implementation architecture

标签 django architecture django-models django-database

定义

  • SOFT DELETE - 不会从数据库中删除对象,但似乎会这样做
  • 硬删除 - 从数据库中完全删除对象


  • 在代码库(特别是 Django 项目)中实现软删除的最佳方法是什么?
    我认为最简单的方法是简单地添加:
    is_deleted = models.BooleanField(default=False)
    
    到实现 softDeleteObject 的父类(super class),然后覆盖 delete()在有问题的对象上设置适当的标志。相关对象也需要从同一个父类(super class)继承。
    另一种方法是删除原始对象,并拥有相当于已删除对象表示的存档对象。
    分析
    第一个看起来更简单,但确实需要一些广泛的覆盖 - 例如,User必须被覆盖以确保所有已删除对象的外键关系仍然存在,并且删除用户不会硬删除其所有软删除对象。
    第二个可以用 pre_delete 信号实现,触发代理对象的创建。这再次具有一些优点(不需要覆盖所有 delete() 方法),但确实需要实现项目中使用的模型的存档版本。
    哪个更可取,还有其他选择吗?

    最佳答案

    为什么不在需要的特定模型上使用事件/已删除/状态标志并这样做呢?或查看应用 django-reversion , 可能有你需要的一切;)

    关于Django 和软删除 : Implementation architecture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14957416/

    相关文章:

    oop - 比较存储库与提供者与服务

    python - Django FileField 存储选项

    mysql - django 字符集与 MySQL 怪异

    python - 如何处理/映射自定义 postgresql 类型到 Django 模型

    python - 在 Django 应用程序中集成和使用旧版 Mysql 数据库

    python - Django模板如何修复错误 "Could not parse the remainder: ' |' from ' |' "

    asp.net - 一个服务层可以包含多个服务吗?

    architecture - 旧版兼容性的最佳实践

    python - Django:快速处理添加不可空字段

    python - 为什么 Python/Django 不断重定向到 url 'catalog' ?