我有一个django项目,管理员可以在其中上传媒体.当项目出售时,它们将从站点中删除,从而删除它们在MySQL数据库中的条目.但是,与项目关联的图像仍保留在文件系统上.这不是必然的坏行为 - 我不介意保留文件,以防删除是一个意外.我想到的问题是两年后,由于媒体文件夹因旧产品图像而膨胀,存储空间有限.
有没有人知道一种系统/程序化的方法来对所有图像进行排序并将它们与相关的MySQL字段进行比较,删除任何与文件系统不匹配的图像?在完美的世界中,我想象一下django-admin中的一个按钮,如"清理未使用的媒体",它执行一个能够执行此行为的python脚本.我会在这里分享我最终的解决方案,但我现在正在寻找的是那些有想法,知道资源或者自己在某些方面做过这件事的人.
在Django中,我有以下模型:
from django.db import models
from django.core.files.base import File
import os, os.path
class Project(models.Model):
video = models.FileField(upload_to="media")
def replace_video(self):
"""Convert video to WebM format."""
# This is where the conversion takes place,
# returning a path to the new converted video
# that I wish to override the old one.
video_path = convert_video()
# Replace old video with new one,
# and remove original unconverted video and original copy of new video.
self.video.delete(save=True)
self.video.save(os.path.basename(video_path), File(open(video_path ,"wb")), save=True)
os.remove(video_path)
Run Code Online (Sandbox Code Playgroud)
我希望能够在模型对象/实例上替换 …