请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

如果在admin中删除字段想做其他自定义操作(如删除该行记录的图片),要怎么做?

正在回答

1回答

和自定义save函数类似,可以在模型Model里面重写delete方法,在delete方法里面实现你所需要的操作。

class ModelDemo(models.Model):
    def delete(self):
        # 实现相关逻辑
        pass


0 回复 有任何疑惑可以回复我~
  • class Image(models.Model):
        name = models.CharField(max_length=255, null=False, verbose_name="图片名称")
    
        class Meta:
            db_table = 'Image'
            verbose_name = '图片'
            verbose_name_plural = verbose_name
    
        def delete(self, *args, **kwargs):
            //图片名即文件名(包含文件后缀)
            os.remove(settings.IMAGES_DIR + self.name)
            super().delete(*args, **kwargs)
    ----------------------------------------------------------------
    MEDIA_URL = os.path.join(BASE_DIR, 'resources/')
    MEDIA_ROOT = os.path.join(BASE_DIR, 'resources')
    IMAGES_DIR = os.path.join(MEDIA_ROOT, 'images/')
    ------------------------------------------------------------
    图片存储在:项目根目录/resources/images/
    使用了X-Admin
    删除记录时,没有把文件也删除了
    回复 有任何疑惑可以回复我~ 2019-08-22 18:01:59
  • 打印一下remove的路径看看有没有完全正确。
    回复 有任何疑惑可以回复我~ 2019-08-22 18:08:41
  • >>> image.name
    '745b97329e7ff145b4b2e51a889cac11.jpg'
    >>> my_image = os.path.join(settings.IMAGES_DIR, image.name)
    >>> print(my_image)
    L:\Python\Project\resources\images\745b97329e7ff145b4b2e51a889cac11.jpg
    >>> os
    <module 'os' from 'L:\\Python\\Python\\lib\\os.py'>
    >>> os.remove(my_image)
    -----------------------------------------------------------
    我的项目根目录绝对路径:L:\Python\Project\
    图片存储目录:L:\Python\Project\resources\images\
    直接在命令行可以删除,但是在admin中删除记录时候没有删除图片源文件,只删除了记录
    -----------------------------------------------------------
    class Image(models.Model):
        name = models.CharField(max_length=255, null=False, verbose_name="图片名称")
    
        class Meta:
            db_table = 'Image'
            verbose_name = '图片'
            verbose_name_plural = verbose_name
    
        def delete(self, *args, **kwargs):
            my_image = os.path.join(settings.IMAGES_DIR, self.name)
            os.remove(my_image)
            super().delete(*args, **kwargs)
    回复 有任何疑惑可以回复我~ 2019-08-23 00:58:40
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信