2

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

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

然而,这很混乱——我们最终会遇到类似文件的情况

/media/userID/oldfilename.pdf 

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

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

4

1 回答 1

1

简单的解决方案是编写自定义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
于 2012-02-13T15:57:41.900 回答