您的位置:首页 > 编程语言 > Go语言

django:在models中实现上传图片“之前”删除旧图

2020-02-04 23:34 911 查看

需求

使用ImageField字段,想在上传新的图片之前删除文件中旧的图片。

实现

1.models中导入两个库,新建一个函数

两个库:

from django.db.models.signals import pre_delete
from django.dispatch import receiver

带有图片上传的模型类:

class Student(models.Model):
.....
student_portrait = models.ImageField(upload_to="portrait", verbose_name="头像")
...

新建一个函数:

@receiver(pre_delete, sender=Student)  #sender ImageField字段所在的类
def file_delete(instance, **kwargs):
# 设置True,删除之后保存模型,设置Fasle删除之后不保存模型,view中还可继续其它操作
instance.~~~.delete(True)  # ~~~=类中imageField目标字段

2.views中导入模型和新建函数进行使用

file_delete(instance=Student.objects.get(id=1))

使用总结

  1. 其它使用方法:文件类型一样可以生效
  2. 局限性:只适合更新操作,如果获取的instance不存在就很麻烦。假如再加一句判断获取实例是否存在的语句又显得太不优雅,这么做的话,可能需要至少三条models语句才能完成图片的更新。
  • 点赞
  • 收藏
  • 分享
  • 文章举报
一位社会主义程序员 发布了12 篇原创文章 · 获赞 1 · 访问量 943 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: