django-softdelete-it 软删除简单使用

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

软删除就是逻辑删除。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})

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值