【问题标题】:Django FileSystemStorage get_available_name return name and countDjango FileSystemStorage get_available_name 返回名称和计数
【发布时间】:2013-03-20 17:09:40
【问题描述】:

我希望有人能指出我正确的方向。

默认的 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 之后执行的相应保存方法,但在抓取计数方面没有成功。背景是一个文件类,我保存在这样的视图中:

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 返回计数以保存到视图中以供进一步处理? 任何帮助都将不胜感激。 谢谢!

PS:贴出的代码不会运行,更像是伪代码,但我希望你能明白。

【问题讨论】:

  • 为什么不拆分该名称并获取计数
  • 对,我也想过,不知道为什么要走“硬路”……

标签: django django-file-upload


【解决方案1】:

您可以只检查 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:])

这比找到一种传回计数的方法要贵一些,但它应该可以解决问题。

【讨论】:

  • 这不是我真正想要的,但我不接受这个答案。
猜你喜欢
  • 2011-06-17
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多