跳转到主要内容

通过在数据库中隐藏对象而不是删除它们。

项目描述

Django safedelete

https://github.com/makinacorpus/django-safedelete/workflows/Python%20application/badge.svg https://img.shields.io/pypi/dm/django-safedelete.svg https://coveralls.io/repos/makinacorpus/django-safedelete/badge.png

这是什么?

由于各种原因,您可能希望避免从数据库中删除对象。

这个Django应用程序提供了一个抽象模型,允许您透明地检索或删除对象,而无需将其从数据库中删除。

您可以选择删除对象时发生的情况
  • 它可以从您的数据库中隐藏(软删除,默认行为)

  • 它可以从数据库中隐藏,并隐藏任何相关模型。(软删除级联)

  • 它可以正常删除(硬删除)

  • 它可以硬删除,但如果其删除会删除其他对象,它只会被隐藏(硬删除非级联)

  • 它永远不会被删除或从数据库中隐藏(不删除,请谨慎使用)

示例

# imports
from safedelete.models import SafeDeleteModel
from safedelete.models import HARD_DELETE_NOCASCADE

# Models

# We create a new model, with the given policy : Objects will be hard-deleted, or soft deleted if other objects would have been deleted too.
class Article(SafeDeleteModel):
    _safedelete_policy = HARD_DELETE_NOCASCADE

    name = models.CharField(max_length=100)

class Order(SafeDeleteModel):
    _safedelete_policy = HARD_DELETE_NOCASCADE

    name = models.CharField(max_length=100)
    articles = models.ManyToManyField(Article)


# Example of use

>>> article1 = Article(name='article1')
>>> article1.save()

>>> article2 = Article(name='article2')
>>> article2.save()

>>> order = Order(name='order')
>>> order.save()
>>> order.articles.add(article1)

# This article will be masked, but not deleted from the database as it is still referenced in an order.
>>> article1.delete()

# This article will be deleted from the database.
>>> article2.delete()

兼容性

  • 分支0.2.x与django >= 1.2兼容

  • 分支0.3.x与django >= 1.4兼容

  • 分支0.4.x与django >= 1.8兼容

  • 分支0.5.x与django >= 1.11兼容

  • 分支1.0.x、1.1.x和1.2.x与django >= 2.2兼容

  • 分支1.3.x与django >= 3.2和Python >= 3.7兼容

当前分支(1.3.x)使用

  • Django 3.2,Python 3.7到3.10进行测试。

  • Django 4.0,Python 3.8到3.10。

  • Django 4.1,Python 3.8到3.10。

  • Django 4.2,Python 3.8到3.11。

安装

从pypi(使用pip)安装。

pip install django-safedelete

从github安装。

pip install -e git://github.com/makinacorpus/django-safedelete.git#egg=django-safedelete

在您的INSTALLED_APPS中添加safedelete

INSTALLED_APPS = [
    'safedelete',
    [...]
]

应用程序没有特殊要求。

配置

在主要的Django设置中,您可以激活布尔变量SAFE_DELETE_INTERPRET_UNDELETED_OBJECTS_AS_CREATED。如果您这样做,Django标准管理器类中的update_or_create()函数将为created变量返回True,如果对象被软删除并现在“复活”。

默认情况下,表示数据库条目被软删除的字段是deleted,但是,您可以使用SAFE_DELETE_FIELD_NAME设置覆盖字段名。

文档

文档可在此处找到。使用以下命令生成自己的文档:

tox -e docs

许可

请参阅LICENSE文件。

联系信息

请参阅AUTHORS文件。

https://drupal.org/files/imagecache/grid-3/Logo_slogan_300dpi.png

变更日志

1.4.0 (2024-05-13)

  • 支持Python 3.11 / Django 5.0

  • 停止支持Django 3.2 / 4.0 / 4.1

1.3.3 (2023-11-13)

  • 添加硬删除操作到SafeDeleteAdmin #236

1.3.2 (2023-04-05)

  • 修复admin中的undelete计数 #220

  • 修复翻译

  • 修复传递给db_for_write的参数类型 #222

  • Django 4.2支持 #223

  • 修复SafeDeleteQueryset.as_manager()现在返回SafeDeleteManager

1.3.1 (2022-10-03)

  • 修复排除异常 #216

1.3.0 (2022-08-17)

  • 添加类型定义 #213

  • 停止支持Django < 3.2和Python 3.6

  • 为删除字段添加索引 #153

1.2.3 (2022-08-17)

  • 实现查询的NO_DELETE和HARD_DELETE #209

  • 当尝试删除具有相关对象为PROTECT的对象时,软删除级联引发异常 #210

1.2.2 (2022-05-03)

  • 修复通用关系中的软删除级联 #207

  • 将删除和undelete方法中的计数返回 #204

1.2.1 (2022-04-29)

  • 修复非safedelete模型的related_objects

1.2.0 (2022-04-26)

  • 添加SafeDeleteCascadeControlModel #197

  • 更新或创建时未考虑主键唯一性 #200

1.1.2 (2021-12-16)

  • 添加django 4.0和python 3.10兼容性和测试 #191

  • 修复highlight_deleted_field翻译 #183

1.1.1 (2021-11-15)

  • 添加highlight_deleted_field #177

  • 添加新的safedelete管理员过滤器 #175

  • 错误:has_unique_fields()对于models.UniqueConstraint返回false #179

1.1.0 (2021-09-23)

  • 修复安全删除模型与其它模型的联合查询集的属性错误 #152

  • 删除后设置相关对象 #156

  • 避免删除函数的递归调用。 #121

  • 添加 SAFE_DELETE_FIELD_NAME 设置 #164

  • 将过滤可见性逻辑移动到查询中,以修复注释中的子查询 #160

  • 添加函数以自定义策略的删除行为 #167

1.0.0 (2021-02-15)

  • 放弃对 Django < 2.2 的支持

  • 修复 Django 4.0 的弃用警告

0.5.7 (2021-01-28)

  • 为联合操作添加可见性过滤器 #145

  • 软删除时设置相关字段 #144

  • has_unique_fields() 现在考虑 unique_together 选项 #147

  • 修复子查询中的过滤问题 #148

0.5.6 (2020-07-20)

  • 在 delete() 中调用 self.save() 而不是 super

0.5.5 (2020-05-14)

  • 管理员操作现在如果某些对象未被恢复删除会发出警告

  • 删除对 Django 1.11 之前版本的支持

0.5.4 (2019-12-02)

  • Django 3.0 兼容性

0.5.3 (2019-12-02)

  • 修复“对查询集进行 .get 操作会添加已删除对象 #131”的问题

0.5.2 (2019-08-19)

  • 修复与 Django 2.2 的性能问题

  • 修复在级联软删除期间对已软删除项执行软删除的问题

0.5.1 (2018-07-02)

  • 修复管理员中的可能的 Unicode 错误

0.5.0 (2018-05-29)

  • 放弃对 Django 1.8 到 1.10 和 Python 3.3 的支持。

    (目前应该仍然可以使用,但未经过测试,使用风险自负)。

  • 修复 update_or_create (#98)

0.4.5 (2018-01-31)

  • 修复 Django 1.8 和 values_list 的问题

  • Django 2.0 兼容性

0.4.4 (2018-01-09)

** 错误修复 **

  • 修复最新和最早的

0.4.3

** 错误修复 **

  • 将 SafeDeleteMixin 设为抽象

0.4.2

** 错误修复 **

  • iterator() 现在正确过滤已删除的对象。

  • 修复 prefetch_related() 与 all() 的问题

  • 修复:“一旦取了切片,就无法过滤查询”错误。

** 重构 **

  • 解决 Django 1.9+ 的 allow_tags 弃用警告

  • 修复 SafeDeleteManager 中的 docstring 错误,SOFT_DELETE 应该是 DELETED_INVISIBLE

0.4.1

** 新增 **

  • 在评估时对已删除字段进行过滤。

  • 添加特定管理器:all_objects 和 deleted_objects。

  • 为 SafeDeleteQuerySet 添加“force_policy”功能。

** 删除 **

** 错误修复 **

  • 修复抽象中间模型与 SOFT_DELETE_CASCADE 不兼容的问题

** 重构 **

  • 将 SafeDeleteMixin 重命名为 SafeDeleteModel 以更好地反映预期行为。现在使用 SafeDeleteMixin 会抛出 DeprecationWarning。

  • 移动 SafeDeleteQueryset

0.4.0

** 新增 **

  • deleted 现在是 datetime 类型。

** 重构 **

  • 全局变量(HARD_DELETE, SOFT_DELETE, …)已移动到 config.py

  • 放弃对 Django 1.4 到 1.7 的支持。如果您需要在 Django <= 1.7 中使用 safedelete,应使用 0.3.x 分支。

  • 删除工厂以使用混入。

0.3.5

** 新增 **

  • DELETED_VISIBLE_BY_PK 改为 DELETED_VISIBLE_BY_FIELD 以能够更改使用的字段。

0.3.4

** 新增 **

  • 添加 SOFT_DELETE_CASCADE 策略,该策略对相关对象执行软删除

  • Django 1.8 兼容性

0.3.2

  • 通过将 SafeDeleteManager(管理器中的内部类)声明为全局来防止 django 1.8 的迁移错误

0.3.1

  • 修复发布到 PyPI 的问题

0.3.0

** 新增 **

  • 添加 NO_DELETE 策略,该策略从不软删除或硬删除实例

  • Django 1.8 兼容性

** 删除 **

  • 已删除对 Django 1.2 和 Django 1.3 的支持

** 错误修复 **

  • all_with_deleted 方法不会在相关管理器上丢失当前查询集

  • 唯一性现在也检查软删除实例

  • prefetch_related() 现在与 SafedeleteQuerySet 一起工作

  • 修复管理员中活动对象的恢复删除操作

0.2.1 (2014-12-15)

** 新增 **

  • 扩展 Django 兼容性到 Django 1.2

0.2.0 (2014-12-09)

** 新增 **

  • Django 兼容性 1.3 > 1.7

  • 添加管理工具

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

django_safedelete-1.4.0.tar.gz (32.5 kB 查看哈希)

上传时间 源代码

构建分发

django_safedelete-1.4.0-py3-none-any.whl (44.0 kB 查看哈希)

上传时间 Python 3

支持者