Sì, questo è venuto anche per me. Ecco cosa ho fatto.
Modello:
from app.storage import OverwriteStorage
class Thing(models.Model):
image = models.ImageField(max_length=SOME_CONST, storage=OverwriteStorage(), upload_to=image_path)
definito anche in models.py:
def image_path(instance, filename):
return os.path.join('some_dir', str(instance.some_identifier), 'filename.ext')
in un file separato, storage.py: i valori dei campioni
from django.core.files.storage import FileSystemStorage
from django.conf import settings
import os
class 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://code.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
Ovviamente, questi sono qui , ma nel complesso questo funziona bene per me e questo dovrebbe essere abbastanza semplice da modificare se necessario.
È possibile aggiungere data e ora per la vostra immagine attuale .. Si potrebbe utilizzare come suffisso .. come '2016_987890_image.jpg' .. questo ti aiuterà anche nell'immagine di serching – aryan