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

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • android 电脑浏览器,这5种轻量级的国内Android浏览器,都有自己的“专有秘密”…

    android 电脑浏览器,这5种轻量级的国内Android浏览器,都有自己的“专有秘密”…在上一篇文章中,我整理并测试了六种来自国际力量的Android浏览器,包括流行的Chrome,具有丰富扩展功能的Firefox,具有隐私和安全性的FirefoxFocus,具有悠久历史的Opera,以及后来的MicrosoftEdge,Yandex除了主要国际制造商生产的产品外,国内开发商还致力于Android浏览器类别。他们希望在保持简单设计的基础上,寻求提供更多差异化的功能。这次我选择了五…

  • DHCP协议 详解[通俗易懂]

    DHCP协议 详解[通俗易懂]原文地址:http://blog.csdn.net/windeal3203/article/details/50677166  DHCP:动态主机配置协议  TCP/IP协议想要运行正常的话,网络中的主机和路由器不可避免地需要配置一些信息(如接口的IP地址等)。有了这些配置信息主机/路由器才能提供/使用特定的网络服务。  主机信息的必要元素有:IP地址、子网掩码、DNS服务器IP地址

  • SQL 分页查询 返回总条数

    SQL 分页查询 返回总条数分页查询返回总数SELECTSQL_CALC_FOUND_ROWS*FROMtbWHERExxxlimitM,N;SELECTFOUND_ROWS();

  • iframe自适应高度_html页面自适应

    iframe自适应高度_html页面自适应为什么需要使用iframe自适应高度呢?其实就是为了美观,要不然iframe和窗口长短大小不一,看起来总是不那么舒服,特别是对于我们这些编程的来说,如鲠在喉的感觉。在页面中通过iframe嵌入了另外一个页面后,如何使得页面的这块区域随着iframe的高度自动适应而不会出现蹩脚的上下左右滚动条呢?下面这个办法就是使用javascript实现iframe高度自适应的,这个可是兼容所有浏览器的,ie,f…

    2022年10月12日
  • 常见图片文件格式简析下载_图片的文件格式有哪些

    常见图片文件格式简析下载_图片的文件格式有哪些“常见”:此处指BMPJPEGGIFPNG四种。软件:Windows画图(除了Photoshop,我最喜欢的编辑器,简单粗暴)HxDBMPBMP文件分为4部分:bmp文件头(bmpfileh

  • python环境搭建和pycharm的安装配置及汉化(零基础小白版)[通俗易懂]

    python环境搭建和pycharm的安装配置及汉化(零基础小白版)[通俗易懂]前言:写这篇文章主要是介绍一下python的环境搭建和pycharm的安装配置,适合零基础的同学观看。这篇文章你会学到python的环境搭建和python比较好用的IDEpycharm的安装与基础配置。运行环境:window64位操作系统。没想到这么多的人看这篇文章,并且接连不断给我发邮箱,问问题,这篇文章不是用markdown写的,不好改,我重新写了一份,放在我的博客里面,这里是地址…

发表回复

您的电子邮箱地址不会被公开。

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