zoukankan      html  css  js  c++  java
  • Django Admin 删除文件同时删除资源文件(delete_upload_files)

    一  使用环境

      开发系统: windows

      IDE: pycharm  

      数据库: msyql,navicat

      编程语言: python3.7  (Windows x86-64 executable installer)

      虚拟环境: virtualenvwrapper

      开发框架: Django 2.2

    二 Django Admin 删除文件同时删除资源(图片文件)

    1.都写在 admin.py 中(也可以写到models.py中),delete_upload_files方法必需放到admin模型类的下方,放上面就不能执行.

    import os
    from django.db.models.signals import post_delete
    from django.dispatch import receiver
    from django.conf import settings

     1.1 标准方法,sender=Company,Company是models模型类名,不是注册admin模型名,'公司logo'为字段名

    # 删除文件同时删除资源图片文件(公司logo)
    @receiver(post_delete, sender=Company)
    def delete_upload_files(sender, instance, **kwargs):
        files = getattr(instance, '公司logo')
        if not files:
            return
        fname = os.path.join(settings.MEDIA_ROOT, str(files))
        if os.path.isfile(fname):
            os.remove(fname)

     1.2 非标准方法,目的都是把路径拼接正确

    # 删除文件同时删除资源图片文件(图片条码)
    @receiver(post_delete, sender=UserProfile)
    def delete_upload_files(sender, instance, **kwargs):
        files = getattr(instance, '图片条码')
        if not files:
            return
        # 字段属性为ImageField,保存时前面加了media,不然保存不到media下,这里取值时要把media\共5位去除,拼接路径从第6位开始,数据库中存储为(media\code\RY0001.png).
        fname = os.path.join(settings.MEDIA_ROOT, str(files)[6:])
        if os.path.isfile(fname):
            os.remove(fname)
  • 相关阅读:
    微信小程序购物商城系统开发系列-工具篇
    如何用js获取浏览器URL中查询字符串的参数
    Vue.js——vue-resource全攻略
    多个 ng-app 中 Controllers & Services 之间的通信
    前端分页功能的实现以及原理
    纯css实现轮播图
    最好的Angular2表格控件
    2017年要学习的三个CSS新特性
    Kafka数据安全性、运行原理、存储
    Hbase与hive集成与对比
  • 原文地址:https://www.cnblogs.com/djtang/p/13530248.html
Copyright © 2011-2022 走看看