Я конвертирую устаревший сайт (первоначально написанный на рельсах), и по умолчанию изображения были сохранены в формате {{pk}}.{{extension}}
, и этот файл был всегда перезаписан, если новый файл загружен. Я хотел бы продолжить этот формат с этой версией django.Django ImageField/FileField сохраняет загруженный файл с использованием модели pk
Первоначально предполагалось, что расширение FileSystemStorage было бы целесообразным, но я не знаю, как передать текущий объект модели на него. У кого-нибудь есть предложение по «джанго» для этого?
Если мне нужно написать свой собственный класс, который расширяет ImageField
, чтобы управлять этим, то пусть будет так. :) Просто интересно, было ли что-то простое, что мне не хватает.
[править] ЧТО Я СДЕЛАЛ, НА ОСНОВЕ ОТВЕТА ОТ surfeurx и DrTyrsa:
temp_image = None
def image_path(self, uploaded_file_name):
prefix = 'designs/'
extension = os.path.splitext(uploaded_file_name)[-1]
if self.pk != None:
return prefix + str(self.pk) + extension
else:
tmp_name = str(uuid.uuid4())
self.temp_image = prefix + tmp_name + extension
return self.temp_image
image_upload = models.ImageField(upload_to=image_path, null=True, blank=True)
def save(self):
self.updated_at = datetime.now()
is_new = self.pk == None
super(Design, self).save()
if is_new:
if self.temp_image != None:
os.rename(MEDIA_ROOT + self.temp_image, MEDIA_ROOT + self.image_path(self.temp_image))
self.temp_image = None
Реальная проблема у меня сейчас, что я хочу, чтобы перезаписать изображение. Это обеспечит правильное имя файла, но похоже, что мне нужно будет продлить ImageField
, чтобы заставить его перезаписать. Найден этот маленький парень: http://djangosnippets.org/snippets/636/
Спасибо! Это очень помогло. Хотя я чувствую себя грязным. Это похоже на наименее элегантную вещь, которую мне когда-либо приходилось писать в джанго. – oliverseal