Есть хороший пример, который удаляет файл с таким же именем, как у загружаемого. Пример ниже.
Это избавит от дубликатов, но проблема, что перед удалением нет проверки, ссылается ли на этот файл другое приложение или запись в таблице.
Как правильно поступить?
Судя по поиску это давно избитый вопрос, но я пока так и не нашёл гармоничного решения, как не плодить дубликаты, или как потом чистить ненужные файлы.
Примерclass OverwriteStorage(FileSystemStorage):
def get_available_name(self, name, max_length=None):
if self.exists(name):
os.remove(os.path.join(settings.MEDIA_ROOT, name))
return name
class Images(models.Model):
img = models.ImageField(storage=OverwriteStorage(), upload_to='photolog', verbose_name='Изображение')