Задачу с изменением имени файла решаем таким образом:
from uuid import uuid4
def path_and_rename(path):
def wrapper(instance, filename):
ext = filename.split(".")[-1]
# get filename
filename = "{}.{}".format(uuid4().hex, ext)
# return the whole path to the file
return os.path.join(path, filename)
return wrapper
Далее для поля задаем:
file = models.FileField(upload_to=path_and_rename("path/to/upload/"), ...)
И всё. Единственное, что можно сделать, так это модифицировать процесс генерации/задания имени файла под свои нужды.