重命名django FileField文件

时间:2012-02-03 17:35:18

标签: django filefield

django应用程序中添加了一些其他功能,因此upload_to功能也得到了扩展。

由于默认情况下django在数据库中存储文件名,而在磁盘上存储文件,因此不会造成任何损害 - 使用新的upload_to函数命名新文件,而旧文件继续工作。

但是,这很麻烦 - 我们最终遇到像

这样的文件
/media/userID/oldfilename.pdf 

/media/app/userID/projectID/newfilename.pdf 

有没有办法批量重命名这些文件?我想这可以通过迭代数据库来完成,检查FileField中的路径是否与当前upload_to的结果匹配,如果没有,重命名..这似乎是一个常见的问题,所以也许有更通用的方法呢?

1 个答案:

答案 0 :(得分:1)

简单的解决方案是编写自定义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 object