一些额外的特性被添加到django应用程序中,因此upload_to功能也得到了扩展。
由于django默认将文件名存储在数据库中,而文件存储在磁盘上,因此没有造成任何损害-新文件使用新的upload_to函数命名,而旧文件继续工作。
然而,这是混乱的--我们最终会遇到这样的文件
/media/userID/oldfilename.pdf 和
/media/app/userID/projectID/newfilename.pdf 有没有办法批量重命名这些文件?我猜这可以通过迭代数据库,检查FileField中的路径是否与当前upload_to的结果匹配,如果不匹配,则重命名..这似乎是一个常见的问题,所以也许有一种更通用的方法呢?
发布于 2012-02-13 23:57:42
简单的解决方案是编写一个自定义的Django management command。您可以使用Django的标准manage.py运行该命令。
如下所示:
from django.core.management.base import BaseCommand, CommandError
from example.models import YourModel
class Command(BaseCommand):
args = ''
help = ''
def handle(self, *args, **options):
# Get all objects
objects = YourModel.objects.all()
for object in objects: # For each object
# If old file path:
if not 'userID/projectID' in objects.filefield.name:
# Move the file, eg usign shutil http://docs.python.org/library/shutil.html#shutil.move
# Update filefield
# save objecthttps://stackoverflow.com/questions/9132917
复制相似问题