2013-03-20 32 views
0

我希望有人能指出我正確的方向。Django FileSystemStorage get_available_name返回名稱和計數

默認的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) 

的觀點:

​​

我怎麼可能從get_available_name從儲蓄流向作進一步處理視圖返回計數? 任何幫助,慷慨讚賞。 Thx!

PS:發佈的代碼不會運行,它更像僞代碼,但我希望你明白了。

+0

你爲什麼不分裂這個名字,並得到計數 – catherine 2013-03-20 17:44:20

+0

正確的,我想過這個,不知道爲什麼我在這裏採取「硬道路」... – Jingo 2013-03-20 17:50:19

回答

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:]) 

這比找到傳遞計數回的方式有點貴,但它應該做的伎倆。

+0

它不是真的我在找什麼,但不接受這個回答。 – Jingo 2013-03-22 13:24:35