import os import uuid from django.utils.deconstruct import deconstructible # Ref: https://stackoverflow.com/questions/2673647/enforce-unique-upload-file-names-using-django @deconstructible class RandomFileName(object): def __init__(self, path): self.path = os.path.join(path, "%s/%s/%s%s") def __call__(self, _, filename): extension = os.path.splitext(filename)[1] file_uuid = uuid.uuid4() uuid_str = str(file_uuid) first_char = uuid_str[0] second_char = uuid_str[1] return self.path % (first_char, second_char, file_uuid, extension)