所以,我正在使用Django(1.10)并且我有几百个上传(媒体)文件。我想移动并重命名所有文件,因为我想略微更改文件夹结构。
在我的models.py中,我确实有一个完美的save()方法,可以将文件保存在正确的位置,但它只适用于新文件。我想移动所有已存在的文件。
我希望通过在所有对象上调用save方法,它会自动移动并重命名文件,但是没有做任何事情(就像我预期的那样)。
有一种简单的方法吗?我觉得我忽略了一个非常简单的解决方案......
答案 0 :(得分:1)
好的,你必须在这里做一些脚本。你可以在这里使用django-extensions。
https://github.com/django-extensions/django-extensions
您可以在项目中设置相同的内容
假设您的模型File
写一个脚本,让migrate_media_files.py
import os
from django.conf import settings
from shutil import copyfile
def run():
base_dir = settings.BASE_DIR
media_dir = os.path.join(base_dir,'project_name/media')
for file in Files.objects.all():
old_file_path = os.path.join(media_dir, file.image.name)
dir_name = '/{}-{}/{}-{}/'.format(file.theme,file.name,file.id, file.name)
if not os.path.exists(os.path.join(media_dir, dir_name)):
os.makedirs(os.path.join(media_dir, dir_name))
new_file_name = '/{}-{}/{}-{}/{}-{}.txt'.format(file.theme,file.name,file.id, file.name, file.id, file.name)
new_file_path = os.path.join(media_dir, new_file_name)
copyfile(old_file_path, new_file_path)
file.image.url = new_file_name
file.save()
运行:
python manage.py runscript migrate_file
此脚本主要播放文件和对象。您可能需要更改和测试。祝一切顺利。