当具有该名称的文件已经存在时,如何防止Django更改文件名?

x1a*_*1a0 6 django filefield imagefield

在我的情况下,我允许用户上传头像图片并简单地使用user_id作为文件名.所以会有1.jpg,2.jpg等

但是我发现如果我为已经上传过的一个帐户上传了一个新的头像,让我们说用户#10,新文件将被命名为"10_1.jpg".这是可以的,但我不需要它,我希望新文件可以覆盖旧文件 - 它还可以节省一些磁盘空间.

我用Google搜索并搜索但无法找到线索.我希望ImageField或FileField有一个选项,但它不存在.

感谢帮助!

Mic*_*din 13

您应该定义自己的存储,从FileSystemStorage继承它,并覆盖其中的get_available_name函数.将此存储用于您的图像域.像这样的东西:

class OverwriteStorage(FileSystemStorage):

    def get_available_name(self, name):
        if self.exists(name):
            os.remove(os.path.join(SOME_PATH, name))
        return name

fs = OverwriteStorage(location=SOME_PATH)

class YourModel(models.Model):
    image_file = models.ImageField(storage=fs)
Run Code Online (Sandbox Code Playgroud)