2013-03-20 64 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