我希望有人能指出我正确的方向。
默认的Django FileSystemStorage函数get_available_name只返回名称,然后将其存储在相应FileField的db中。
原始的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方法,但是没有成功获取计数。背景是有一个文件类,我在视图中保存如下:
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的计数从保存到视图中进行进一步处理? 任何帮助都非常感谢。 THX!
PS:发布的代码不会运行,它更像伪代码,但我希望你能理解。
答案 0 :(得分: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:])
这比找回传递计数的方法要贵一点,但它应该可以解决问题。