iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >重写 django 模型中的删除方法
  • 496
分享到

重写 django 模型中的删除方法

2024-02-11 19:02:52 496人浏览 薄情痞子
摘要

问题内容 我有一个页面模型,在保存对象期间调用 save 方法中的打印。但是,当对象被删除时,不会触发任何打印,并且似乎永远不会调用删除方法。那么我应该如何覆盖默认的删除方法呢? cl

问题内容

我有一个页面模型,在保存对象期间调用 save 方法中的打印。但是,当对象被删除时,不会触发任何打印,并且似乎永远不会调用删除方法。那么我应该如何覆盖默认的删除方法呢?

class Page(models.Model):
    image = models.ImageField()
    number = models.PositiveIntegerField(default=0, blank=True, null=True)
    chapter = models.ForeignKey(Chapter, on_delete=models.CASCADE)

    def get_upload_path(self, filename):
        work_slug = self.chapter.volume.work.slug
        translator_name = slugify(self.chapter.volume.translator)
        volume_number = self.chapter.volume.number
        chapter_number = self.chapter.number
        name, extension = filename.rsplit('.', 1)
        return f'media/{work_slug}/{translator_name}/volumes/volume-{volume_number}/chapters/chapter-{chapter_number}/page-{self.number}.{extension}'

    def save(self, *args, **kwargs):
        if not self.pk:
            last_page = self.chapter.page_set.last()
            if last_page:
                self.number = last_page.number + 1
        self.image.name = self.get_upload_path(self.image.name)
        self.image.storage = s3
        print(f"Saving Page with image: {self.image.name}")
        super().save(*args, **kwargs)

    def delete(self, *args, **kwargs):
        print(f"Deleting Page with image: {self.image.name}")

        image_name = self.image.name
        try:
            s3.delete(image_name)
            print(f"Successfully deleted from S3: {image_name}")
        except Exception as e:
            print(f"Error deleting from S3: {e}")

        super().delete(*args, **kwargs)


正确答案


删除一个对象时调用 model 的 delete 方法。如果您尝试删除查询集(例如从 Django 管理列表页面删除),您必须覆盖模型的查询集。

class PageQuerySet(models.QuerySet):
    def delete(self):
        print("deleting queryset")
        return super().delete()


class PageManager(models.Manager):
    def get_queryset(self):
        return PageQuerySet(model=self.model, using=self._db, hints=self._hints)


class Page(models.Model):
    image = models.ImageField()
    number = models.PositiveIntegerField(default=0, blank=True, null=True)
    chapter = models.ForeignKey(Chapter, on_delete=models.CASCADE)

    objects = PageManager()

    def get_upload_path(self, filename):
        work_slug = self.chapter.volume.work.slug
        translator_name = slugify(self.chapter.volume.translator)
        volume_number = self.chapter.volume.number
        chapter_number = self.chapter.number
        name, extension = filename.rsplit('.', 1)
        return f'media/{work_slug}/{translator_name}/volumes/volume-{volume_number}/chapters/chapter-{chapter_number}/page-{self.number}.{extension}'

    def save(self, *args, **kwargs):
        if not self.pk:
            last_page = self.chapter.page_set.last()
            if last_page:
                self.number = last_page.number + 1
        self.image.name = self.get_upload_path(self.image.name)
        self.image.storage = s3
        print(f"Saving Page with image: {self.image.name}")
        super().save(*args, **kwargs)

    def delete(self, *args, **kwargs):
        print(f"Deleting Page with image: {self.image.name}")

        image_name = self.image.name
        try:
            s3.delete(image_name)
            print(f"Successfully deleted from S3: {image_name}")
        except Exception as e:
            print(f"Error deleting from S3: {e}")

        super().delete(*args, **kwargs)

以上就是重写 djanGo 模型中的删除方法的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 重写 django 模型中的删除方法

本文链接: https://www.lsjlt.com/news/563562.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 重写 django 模型中的删除方法
    问题内容 我有一个页面模型,在保存对象期间调用 save 方法中的打印。但是,当对象被删除时,不会触发任何打印,并且似乎永远不会调用删除方法。那么我应该如何覆盖默认的删除方法呢? cl...
    99+
    2024-02-11
  • mysql中删除重复记录的方法
    这篇文章主要讲解了“mysql中删除重复记录的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql中删除重复记录的方法”吧! ...
    99+
    2024-04-02
  • 重用模型并从 Fiber/MongoDB 的响应中删除字段
    php小编子墨在这篇文章中将介绍如何在Fiber/MongoDB的响应中删除字段并重用模型。当我们从数据库中获取数据时,有时候我们需要删除一些字段,以满足特定的需求或者保护敏感信息。F...
    99+
    2024-02-08
  • Django框架中模型的用法
    目录一、Django ORM二、数据库配置Django 如何使用 mysql 数据库三、定义模型1、创建 APP2、常见报错信息四、数据库操作1、添加数据2、获取数据3、更新数据4、...
    99+
    2024-04-02
  • MySQL删除重复数据的方法
    这篇文章主要介绍MySQL删除重复数据的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!最近在做一个批量数据导入到MySQL数据库的功能,从批量导入就可以知道,这样的数据在插入数据...
    99+
    2024-04-02
  • SQL删除重复数据的方法
    这篇文章将为大家详细讲解有关SQL删除重复数据的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在sql中,可以使用select语句删除重复数据,语法为:“s...
    99+
    2024-04-02
  • 删除数据库中重复数据的方法
    这篇文章主要介绍“删除数据库中重复数据的方法”,在日常操作中,相信很多人在删除数据库中重复数据的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”删除数据库中重复数据的方法”...
    99+
    2024-04-02
  • pd.drop_duplicates删除重复行的方法实现
    目录一、使用语法及参数二、实操1.例子一2.例子二3.删除重复项后重置索引drop_duplicates 方法实现对数据框 DataFrame 去除特定列的重复行,返回 DataFr...
    99+
    2024-04-02
  • windows中zbrush如何删除多余的模型
    本文小编为大家详细介绍“windows中zbrush如何删除多余的模型”,内容详细,步骤清晰,细节处理妥当,希望这篇“windows中zbrush如何删除多余的模型”文章能帮助大家解决疑惑,下面跟着小编的思...
    99+
    2022-12-03
    windows zbrush
  • sql中删除重复数据的方法是什么
    在SQL中删除重复数据的方法有以下两种方式: 使用DELETE和CTE(Common Table Expression)结...
    99+
    2024-04-08
    sql
  • mysql删除数据库中重复记录的方法
    这篇文章给大家分享的是有关mysql删除数据库中重复记录的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql删除数据库中重复记录的步骤:1、统计重复数据;2、使用“SE...
    99+
    2024-04-02
  • redis模糊批量删除key的方法
    目录一、命令行删除二、golang代码删除一、命令行删除 Redis-cli -h 172.18.255.99 -p 6379 -n 6 -a 123456 KEYS "websocket127.0.0.1:5*" | ...
    99+
    2022-12-16
    redis模糊删除key redis模糊批量清除key redis批量清除
  • word模板的删除方法是什么
    要删除Word模板,可以按照以下步骤操作:1. 打开Word软件。2. 在主菜单中选择“文件”选项。3. 在弹出的文件菜单中,选择“...
    99+
    2023-09-29
    word
  • yum中删除phpmyadmin的方法
    小编给大家分享一下yum中删除phpmyadmin的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!如何在yum中删除phpm...
    99+
    2024-04-02
  • javascript中cookie删除的方法
    这篇文章将为大家详细讲解有关javascript中cookie删除的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JavaScript的特点1.JavaScript主要用来向HTML页面添加交互行为。...
    99+
    2023-06-14
  • 利用Python删除电脑中重复文件的方法
    目录一、前言二、练习三、代码演示四、总结一、前言 在生活中,我们经常会遇到电脑中文件重复的情况。在文件较少的情况下,这类情况还比较容易处理,最不济就是一个个手动对比删除;而在重复文件...
    99+
    2024-04-02
  • Windows7 无法删除文件的删除方法
    那如何定位该进程呢通常情况下,我们需要借助诸如“冰刃”等第三方工具。不过,在Windows 7中利用其“资源监视器”可轻松搞定。   下面我们特模拟再现文件无法删除的状况。...
    99+
    2023-05-25
    Windows7 无法删除文件 文件 无法 删除 方法
  • php中重写override的方法
    这篇文章主要介绍了php中重写override的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 定义:重写(override),即子类中定义了与父类重名的成员,子类可以重...
    99+
    2023-06-06
  • Discuz删除模块的设置方法详解
    Discuz删除模块的设置方法详解 在使用Discuz论坛系统时,有时候我们需要对一些模块进行定制化或者删除一些不需要的模块,以满足我们网站的特定需求。在Discuz中,删除模块并不是...
    99+
    2024-03-10
    方法详解 模块删除 discuz设置
  • java中重写equals()方法的同时要重写hashcode()方法(详解)
    object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true;注意:当此方法被重写时,通常有必要重写 hashCod...
    99+
    2023-05-31
    java equals hashcode
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作