簡體   English   中英

在Django中保存文件之前更改文件名

[英]Change filename before save file in Django

在django admin上傳時,我有下一個重命名文件的代碼(在models.py中)

def get_file_path(instance, filename):
    ext = filename.split('.')[-1]
    filename = "%s.%s" % (uuid.uuid4(), ext)
    return os.path.join('directory/', filename)

class Archivo(models.Model):
    archivo = models.FileField(upload_to = get_file_path)

這適用於我,但我想動態傳遞目錄,如下所示:

def get_file_path(instance, filename, directory_string_var):
    ext = filename.split('.')[-1]
    filename = "%s.%s" % (uuid.uuid4(), ext)
    return os.path.join(directory_string_var, filename)

如果我這樣做,我無法將目錄參數(變量)傳遞給“archivo”字段的upload_to選項中的方法。

如果您的目標只是阻止文件填滿給定目錄(這是一個問題,因為取決於文件系統,對包含太多條目的目錄的某些操作可能很昂貴),upload_to可以包含strftime格式,它將被替換為上傳的日期/時間。

archivo = models.FileField(upload_to = 'path/%Y/%M/%D/')

您可以將參數存儲在實例對象中:

def get_file_path(instance, filename):
    ext = filename.split('.')[-1]
    filename = "%s.%s" % (uuid.uuid4(), ext)
    return os.path.join(instance.directory_string_var, filename)

class Archivo(models.Model):
    archivo = models.FileField(upload_to = get_file_path)
    directory_string_var = 'default_directory_string_var'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM