通过在数据库中隐藏对象而不是删除它们。
项目描述
Django safedelete
这是什么?
由于各种原因,您可能希望避免从数据库中删除对象。
这个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文件。
变更日志
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 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ce63f2dd101fec303837ef624592628e022691c3ade2a0893c9fc4c7796e8288 |
|
MD5 | 98c69ac2d3c99e796ce2befb500eb770 |
|
BLAKE2b-256 | 113b379c757c01f54ed7d9ddd129be6e9ad02b394932a93209e5aaa2b71e2da4 |
django_safedelete-1.4.0-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f722845088c00398711fad8961f044cf18badfecaf541bcc616102f46339adda |
|
MD5 | 9823a7c8787c2ac5c2176090b5272aca |
|
BLAKE2b-256 | 657717f4afb25a6986af2146248123ca188f05138eedbc09fc85e9af4b0a97e7 |