0

誰かが私を正しい方向に向けてくれることを願っています。

デフォルトの Django FileSystemStorage 関数 get_available_name は、対応する FileField のデータベースに格納される名前のみを返します。

元の get_available 名は次のようになります。

def get_available_name(self, name):

    dir_name, file_name = os.path.split(name)
    file_root, file_ext = os.path.splitext(file_name)
    count = itertools.count(1)
    while self.exists(name):
        name = os.path.join(dir_name, "%s_%s%s" % (file_root, count.next(), file_ext))

    return name

どうすればカウントも返すことができるでしょうか。(name, count) のようなタプルを返そうとし、get_available_name の後に実行される対応する save メソッドを修正しようとしましたが、count を取得できませんでした。背景は、次のようにビューに保存するファイルクラスを取得したことです。

class DataFile(models.Model):
    title=models.CharField(max_length=255, unique=False, blank=False)
    file=models.FileField(max_length=255, blank=False, storage=fs, upload_to=get_path)

景色:

def save_uploaded_datafile(request):
   ### get request.FILES and save it
   f=DataFile()
   f.file=request.FILES['DataFile']
   f.title=f.file.name
   f.save()

さらに処理するために、ビューに保存してから get_available_name から count を返すにはどうすればよいでしょうか? どんな助けでも親切に感謝します。どうも!

PS: 投稿されたコードは実行されません。疑似コードに似ていますが、理解していただければ幸いです。

4

1 に答える 1

0

f.save() によって返されるファイル名を確認するだけです。

file_name = f.save()
count = None
if file_name not f.title:
    file_root, file_ext = os.path.splitext(file_name)
    my_root, my_ext = os.path.splittext(f.title)
    # Add one to the length of my_root to capture the '_'
    root_length = len(my_root)+1
    count = int(file_root[root_length:])

これは、カウントを戻す方法を見つけるよりも少しコストがかかりますが、うまくいくはずです。

于 2013-03-20T17:44:43.603 に答える