Django实现软删除

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.db.models import QuerySet


class MySoftDeletableQuerySet(QuerySet):
    def delete(self):
        self.update(is_delete=True)


class BaseManager(models.Manager):
    _queryset_class = MySoftDeletableQuerySet

    def get_queryset(self):
        return super().get_queryset().filter(is_delete=False)


class BaseModel(models.Model):
    create_time = models.DateField(auto_now_add=True, verbose_name='创建时间')
    update_time = models.DateField(auto_now=True, verbose_name='修改时间')
    is_delete = models.BooleanField(default=False, verbose_name='是否删除')

    def delete(self, using=None, keep_parents=False):
        self.is_delete = True
        self.save()

    objects = BaseManager()

    class Meta:
        abstract = True  # 抽象基类
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 软删除介绍 简单的说,就是当执行删除操作的时候,不真正执行删除操作,而是在逻辑上删除一条记录。这样做的好处是可以统...
    修行的修行阅读 642评论 0 1
  • 正确的方法如下:先到数据库把表删掉:drop table注释django中对应的Model执行以下命令: 去掉注释...
    Yanl__阅读 634评论 0 0
  • django中实现逻辑删除,主要分三步: 1.增加字段: 2.重写models中delete方法: 3.views...
    whong736阅读 2,980评论 0 0
  • 先来看一下添加新用户按钮的前端页面,可以看到,继承base.html这个父模板之后,只要block内为空,就不会显...
    FKTX阅读 2,622评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,607评论 28 53