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 に答える