【发布时间】:2015-01-18 11:25:52
【问题描述】:
我正在尝试在 Django 中使用 filestorage。一切正常,但我猜是我的保存方法中的一件事。我有一个带有FileField的模型
download_url = models.FileField(verbose_name = 'Konfig', upload_to = file_path, storage = OverwriteStorage())
在我的模型中的这个方法中,我创建了file_path
def file_path(instance, filename):
path = os.getcwd() + '/files'
return os.path.join(path, str(instance.download_url), filename)
我使用的文件存储方法在我的 storage.py 中外包,我将其导入到我的 models.py
from django.core.files.storage import FileSystemStorage
class OverwriteStorage(FileSystemStorage):
def _save(self, name, content):
if self.exists(name):
self.delete(name)
return super(OverwriteStorage, self)._save(name, content)
def get_available_name(self, name):
return name
现在,当我在 django 的管理界面中创建一个新文件时,它成功上传了文件,使用正确的文件路径创建了一个数据库条目,但未能创建正确的路径。当我的文件名是 foo 时,路径如下所示:
cwd/files/foo/foo
如果它的名称是 bar.txt,它将如下所示:
cwd/files/bar.txt/bar.txt
我不希望 django 基于文件名创建子目录。你们能帮帮我吗?
【问题讨论】:
-
在那一行
return os.path.join(path, str(instance.download_url), filename)只需删除文件名 -
我对您的评论的回答为时已晚,但是是的,这是正确的
标签: python django django-file-upload