前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >django中实现逻辑删除[通俗易懂]

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

作者头像
全栈程序员站长
发布2022-08-28 12:45:59
9390
发布2022-08-28 12:45:59
举报

大家好,又见面了,我是你们的朋友全栈君。

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()

代码语言:javascript
复制
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,则返回查询结果集时进行过滤再返回,这样被标记为逻辑删除记录就不会返回:

代码语言:javascript
复制
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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146224.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档