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

django中实现逻辑删除[通俗易懂]django中实现逻辑删除,主要分三步:1.增加字段:is_delete=models.BooleanField(default=False,verbose_name=’逻辑删除’,help_text=’逻辑删除’)2.重写models中delete方法:defdelete(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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 稀疏数组(最详解)「建议收藏」

    稀疏数组(最详解)「建议收藏」概念当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值;把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模 如下图:左边是原始数组,右边是稀疏数组代码实现publicclassSparseArray{publicstaticvoidmain(String[]args){//创建一个二维数组11*110:没有棋子,1:黑..

    2025年7月17日
    3
  • 大话设计模式C++实现-第22章-桥接模式

    大话设计模式C++实现-第22章-桥接模式

    2022年2月5日
    42
  • 暂时性死区 理解

    暂时性死区 理解let和const声明的变量不存在变量提升,其作用域都是块级作用域,凡是在声明变量之前使用变量就会报错,所以,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporaldeadzone,简称TDZ)。if(true){//死区开始lzp=’lut’;//ReferenceErrorconsole….

    2022年6月26日
    40
  • 3.cocos2dx它Menu,由menu为了实现场景切换

    3.cocos2dx它Menu,由menu为了实现场景切换

    2022年1月4日
    49
  • CRC16 的生成及校验原理「建议收藏」

    CRC16 的生成及校验原理「建议收藏」参考:https://blog.csdn.net/niepangu/article/details/45499383计算CRC的过程,就是用一个特殊的“除法”,来得到余数,这个余数就是CRC。&#1

    2022年8月4日
    5
  • 如何运行PHP代码_运行php网站

    如何运行PHP代码_运行php网站如何运行php代码相信不少初学者会遇到不知道如何运行php这个尴尬的问题,小白博主就来一次比较详细的介绍第一步:下载Wampserverwarmserver提供了php运行的环境,安装的步骤这里就不给出了,百度一下会有的。http://www.wampserver.com/下载Wampserver传送门第二步:写一段简单的php代码

    2022年10月2日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号