Мне нужно загрузить изображение в Django ImageField, но из-за ограничения, основанного на стороннем API, мне нужно, чтобы изображения загружались в каталог мультимедиа без подкаталога.
Ограничение связано с тем, что имя файла, хранящееся локально (в столбце поля изображения), используется для вычисления хэша для запроса этого изображения из мультимедийного API, поэтому поле должно содержать то же имя, что и имя файла в API, к сожалению, Имя файла API не может содержать косую черту.
Я не могу добавить поле в базу данных для хранения настоящего имени файла и не могу управлять кодом, который возвращает вычисленный хэш.
Я попытался сделать upload_to вызываемым, который возвращает пустую строку, которая, кажется, позволяет обойти ошибку upload_to required, но все изображения затем сохраняются как просто '' (blank) _1, _2 ... и т. Д. Без остальной части изображения название.
Я также попытался заставить upload_to возвращать '/', '../media', '../media/' - все безрезультатно (различные ошибки или искаженные имена файлов)
Итак, TL; DR, как сохранять изображения прямо в MEDIA_ROOT, без подкаталога?
РЕДАКТИРОВАТЬ, дополнительная информация:
Итак, я просто попробовал небольшой хак, который делает его частью:
from django.core.files.storage import FileSystemStorage
media_root_store = FileSystemStorage(location='/path/to/media/parent')
class MyModel(models.Model):
img_file = models.ImageField(
max_length=255,
upload_to='media',
storage=media_root_store)
Этот грязный прием сохраняет изображение в правильном месте, хотя очевидно, что путь к изображению сохраняется с добавлением media /. Так что я не уверен, что это на самом деле приблизило меня.