2

我正在尝试使用Django中的文件存储。一切正常,但我猜是我的保存方法中的一件事。我有一个模型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/文件/foo/foo

如果它的名字是bar.txt它看起来像下面这样:

cwd/文件/bar.txt/bar.txt

我不希望 django 基于文件名创建子目录。你们能帮帮我吗?

4

1 回答 1

1

我很确定您必须将保存功能从“save”重命名为“_save”。

在 Super Call 中,您使用了 ._save,它与上面的 save 函数不同。

你可以在这里阅读很多关于超级的信息

于 2014-11-20T15:17:38.507 回答