重命名django FileField文件



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

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

然而,这是混乱的-我们最终会遇到像这样的文件

/media/userID/oldfilename.pdf 

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

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

简单的解决方案是编写一个自定义的Django管理命令。您可以使用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

相关内容

  • 没有找到相关文章

最新更新