Django 根据 id 删除图像

Django remove image based on id

假设我有以下简单模型:

class GraphData(models.Model):
    """
    Stores graph data for easy access
    """
    uid = models.CharField(max_length=10, db_column='uid')
    graph_params = models.TextField(db_column='graph_params')

当数据库中的行被删除时,我想删除位于 server.com/images/<uid>.png 的图像。 我知道我需要捕获 pre_delete 信号,但是如何删除图像本身?

首先,配置您的 MEDIA_ROOT:

import os


# Project root is intended to be used when building paths,
# e.g. ``os.path.join(PROJECT_ROOT, 'relative/path')``.
PROJECT_ROOT = os.path.abspath(os.path.dirname(__name__))

# Absolute path to the directory that will hold uploaded files.
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'uploads/')

那么你可以使用os.remove():

import os

from django.conf import settings


def delete_file(path):
    """
    Deletes specified file from uploads.

    Usage:
        delete_file('path/to/file.extension')
    """
    os.remove(os.path.join(settings.MEDIA_ROOT, path))

一个非常简单的方法是使用我们在 python.

中使用的 os.remove

例如:os.remove(path)

其中path为文件路径