MEDIA_ROOT - это каталог, куда вы хотите поместить файлы, MEDIA_URL должен быть URL-адресом, который ведет к тому же пути к каталогу.
Параметр upload_to может быть каталогом в этом каталоге, поэтому upload_to = "foo" перейдет в подкаталог "foo" MEDIA_ROOT.
Или это может быть функция, которая берет экземпляр поля изображения и предложенное базовое имя файла и возвращает реальное имя файла, которое вы хотите использовать. Итак
upload_to=get_photo_path
и
def get_photo_path(instance, filename):
if not filename: return ""
exts = re.search('[.]([^.]*)$',filename)
if exts is None:
ext = ''
else:
ext = '.'+exts.group(1)
return "newname%s" % (ext)
Переименовал файл, но сохранил расширение. Обратите внимание, что "newname. " по-прежнему будет в каталоге MEDIA_ROOT - вам не нужно возвращать "/usr/whwhat/something/foo/newname.". Там уже есть MEDIA_ROOT для вас.
Обновление:
К вашему сведению, приятно знать о
<modelobject>.<imagefieldname>.field.generate_filename( <modelobject>, proposed_name )
Вот как вы можете сгенерировать частичный путь, по которому будет идти изображение, снаружи модели. Вам необходимо вручную добавить MEDIA_ROOT к этому, чтобы сделать его абсолютным путем.