django中实现逻辑删除[通俗易懂]

django中实现逻辑删除[通俗易懂]django 中实现逻辑删除 主要分三步 1 增加字段 is delete models BooleanField default False verbose name 逻辑删除 help text 逻辑删除 2 重写 models 中 delete 方法 def delete self using None keep parents False

django中实现逻辑删除,主要分三步:

1.增加字段:

is_delete = models.BooleanField(default=False, verbose_name=’逻辑删除’, help_text=’逻辑删除’)

2.重写models中delete方法:

def delete(self, using=None, keep_parents=False):
“””重写数据库删除方法实现逻辑删除”””
self.is_delete = True
self.save()

3.views中过滤查询结果集:

queryset = Role.objects.filter(is_delete=0).all()

class Role(models.Model):
"""角色表,一的一方"""
name = models.CharField(max_length=30, unique=True, verbose_name='角色名称',
help_text='角色名称') # 媒体运营,媒介,广告运营,销售,活动运营,财务,技术,唯一,必填
desc = models.CharField(max_length=100, null=True, blank=True, verbose_name='角色描述', help_text='角色描述') # 非必填
is_delete = models.BooleanField(default=False, verbose_name='逻辑删除', help_text='逻辑删除')

class Meta:
db_table = 'tb_role'
verbose_name = '角色'
verbose_name_plural = verbose_name

def delete(self, using=None, keep_parents=False):
"""重写数据库删除方法实现逻辑删除"""
self.is_delete = True
self.save()

def __str__(self):
"""控制对象输出内容"""
return self.name

如果使用到drf,则返回查询结果集时进行过滤再返回,这样被标记为逻辑删除记录就不会返回:

class RoleViewSet(ModelViewSet):
"""
list:
查询所有角色信息

create:
创建角色

read:
根据角色id,查询角色信息

delete:
根据角色id,删除角色

update:
根据角色id,更新角色信息

partial_update:
根据角色id,部分更新角色信息
"""
queryset = Role.objects.filter(is_delete=0).all()
serializer_class = RoleModelSerializer

# 局部权限控制
# permission_classes = [IsAuthenticated]

# 精确过滤,/role_manage/roles/?name=媒体运营,无法模糊过滤
# filter_fields = ['name'] # INSTALLED_APPS需添加应用:'django_filters',否则报错

# 模糊过滤,/role_manage/roles/?name=媒体,能模糊过滤
filterset_class = RoleFilter # 自定义角色过滤器

# 局部分页,page_size=10:每页获取10条,page=1:获取第1页
# /role_manage/roles/?page=1&page_size=10
pagination_class = StandarPageNumberPagination
编程小号
上一篇 2025-03-12 19:57
下一篇 2025-04-06 21:51

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/144290.html