2010-11-05 77 views
3

我有下面的代碼重新命名我的文件上傳時,在Django管理(在models.py)更改文件名之前保存的文件在Django

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) 

如果我這樣做,我無法通過目錄參數(變量)在「檔案館」字段的upload_to選項的方法。

回答

7

如果你的目標只是防止文件填滿給定的目錄(這是一個問題,因爲取決於文件系統,對具有太多條目的目錄的一些操作可能是昂貴的),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' 
+1

感謝的人,存放在該實例工作參數我! :d – eos87 2010-11-05 22:51:51