Django soft-delete软删除

Posted 浮光掠影转瞬间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django soft-delete软删除相关的知识,希望对你有一定的参考价值。

 

   在django中,实现这个功能很简单,我们采用一个字段用来保存删除的时间。若记录没有被删除,那么设置该值为None,如果被删除,那么设置时间为删除的时间。

1 class BaseSchema(models.Model):
2     createdAt = models.DateTimeField("创建时间",auto_now_add=True)
3     updatedAt = models.DateTimeField("更新时间",auto_now=True)
4     deletedAt = models.DateTimeField("删除时间",null=True,default=None)
5 
6     def delete(self, using=None, keep_parents=False):
7         self.deletedAt = timezone.now()
8         self.save()

 

上面是一个基类,正真的模型是继承自它,这样可以记录下创建时间,每次会自动更新更新时间,并且实现了软删除。

可以看到,重写了delete方法,当执行删除操作的时候(例如:User.objects.get(id=1).delete()),会在里面更新属性deletedAt的值,然后保存,并不会正真删除记录。

所以你在取得元素的时候,要注意一些,需要使用filterUser.objects.filter(deletedAt=None),而不是all()

 

学习博客地址: http://m.blog.csdn.net/q1242027878/article/details/74906780




以上是关于Django soft-delete软删除的主要内容,如果未能解决你的问题,请参考以下文章

Django,级联移动到单独的表而不是级联删除

Django AutoSlugField 不考虑通过 Django Safe Delete 软删除的实例

Django REST框架--认证和权限

使用 sqlalchemy 实现“软删除”系统

软输入键盘隐藏编辑文本

在片段替换上显示/隐藏 Android 软键盘