是的,这对我也很重要。这就是我所做的。
模型:
from app.storage import OverwriteStorageclass Thing(models.Model): image = models.ImageField(max_length=SOME_CONST, storage=OverwriteStorage(), upload_to=image_path)
还定义在
models.py中:
def image_path(instance, filename): return os.path.join('some_dir', str(instance.some_identifier), 'filename.ext')
在另一个文件中,
storage.py:
from django.core.files.storage import FileSystemStoragefrom django.conf import settingsimport osclass OverwriteStorage(FileSystemStorage): def get_available_name(self, name): """Returns a filename that's free on the target storage system, and available for new content to be written to. Found at http://djangosnippets.org/snippets/976/ This file storage solves overwrite on upload problem. Another proposed solution was to override the save method on the model like so (from https://pre.djangoproject.com/ticket/11663): def save(self, *args, **kwargs): try: this = MyModelName.objects.get(id=self.id) if this.MyImageFieldName != self.MyImageFieldName: this.MyImageFieldName.delete() except: pass super(MyModelName, self).save(*args, **kwargs) """ # If the filename already exists, remove it as if it was a true file system if self.exists(name): os.remove(os.path.join(settings.MEDIA_ROOT, name)) return name
显然,这些是这里的示例值,但是总体而言,这对我来说效果很好,并且根据需要进行修改应该非常简单。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)