Хочется при загрузке файла (изображения) прохэшировать его что-бы во-первых, не допустить загрузку одинаковых файлов, а во-вторых сгенерировать человекочитаемый идетификатор файлу. Ещё хотелось использовать хэш в качестве имени файла. Вопрос, в какой момент именно нужно хэшировать?
Сначала чтобы дать файлу имя попробовал указать для ImageField модели upload_to функцию в которой и хэшировал, но она почему-то вызывается дважды (почему? я так и не нашёл ответ), притом второй раз файл читается как пустой.
Дальше попробовал переопределить метод save модели, но до вызова метода предка файл опять таки читается как пустой, т.е. сам он ещё не сохранён, а после вызова хэшировать поздно ибо хэш нужен как ключ.
Вроде можно прохэшировать в отображении (view) между form.save(commit=False) и model.save(), но это выглядит как костыль, хочется держать его чистым. Вроде можно перенести это в валидацию формы, но непонятно как читать файл оттуда и как сохранять хэш в бд.
tl;dr Не понимаю, как в рамках ORM джанги без костылей хэшировать загружаемые файлы.