软删除就是逻辑删除。django-softdelete-it就是在django中实现这种功能的框架:
文档地址: https://github.com/exploreshaifali/django-softdelete-it
1.安装
pip install django-softdelete-it
2.在 INSTALLED_APPS 中注册:
INSTALLED_APPS = [
...
'soft_delete_it',
]
3.导入
from soft_delete_it.models import SoftDeleteModel
4.功能,继承 这个类,替代models.Model
objects manager's 的行为变化:
delete() 软删除方法- 返回 'non soft deleted' 对象,经
delete()删除的对象是'soft deleted’对象 hard_delete()硬删除,会真实地把这条数据删除。
示例:定义了一个作者和文章类。
from django.db import models
from soft_delete_it.models import SoftDeleteModel
class Author(SoftDeleteModel):
name = models.CharField(max_length=50)
dob = models.DateField()
class Article(SoftDeleteModel):
title = models.CharField(max_length=50)
body = models.TextField(null=True)
author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='articles')
迁移模型,打开shell,在Author中插入两条数据:
>>> Bob = Author.objects.create(name='bob', dob='2000-12-12')
>>> John = Author.objects.create(name='john', dob='1990-10-12')

软删除:
>>> Bob.delete()
(1, {'author': 1})
>>> Author.objects.all() # 返回没有被软删除对象
<SoftDeleteQuerySet [<Author: Author object (4)>]>
>>> Author.all_objects.all() # 返回软删除和没有被软删除对象
<SoftDeleteQuerySet [<Author: Author object (3)>, <Author: Author object (4)>]>

恢复为非软删除对象:
>>> Bob.undelete()
(2, {'author': 1, 'article': 1})

为bob添加一个关联的文章:
>>> article1 = Article(title='Bob The Builder', body='')
>>> article1.author = Bob
>>> article.save()

软删除bob,会把关联的文章也软删除。(undelete(),两个都会恢复,如果软删article1,bob不会被删)
>>> Bob.delete()
(2, {'author': 1, 'article': 1})

本文介绍了Django中的软删除框架django-softdelete-it,它提供了一种不实际删除数据而是进行逻辑删除的方法。通过安装、注册、导入相关类,可以方便地管理和操作软删除的对象。例如,当删除作者时,与其关联的文章也会被软删除,并可通过特定操作恢复。


被折叠的 条评论
为什么被折叠?



