Django soft-delete软删除

xiaoxiao2021-02-27  280

何为软删除

软删除,简单的说,就是当执行删除操作的时候,不正真执行删除操作,而是在逻辑上删除一条记录。这样做的好处是可以统计数据,可以进行恢复操作等等。

Django中的简单实现

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

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

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

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

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

转载请注明原文地址: https://www.6miu.com/read-8398.html

最新回复(0)