@Wiki-fan
Я только учусь

Как переименовывать изображения при загрузке?

Модель такая:
class Picture(models.Model):
	ID = models.IntegerField(primary_key=True)
	name = models.CharField(max_length=256)
	pic_file = models.ImageField(upload_to='media/images')

Форма такая:
class PictureUploadForm(forms.ModelForm):
	name = forms.CharField(max_length=256, help_text="Enter picture name:")
	pic_file = forms.ImageField(help_text='Choose your file:')
	
	class Meta:
		model = Picture
		fields = ('name', 'pic_file',) #Ещё один вопрос мимоходом. Здесь указываются поля, содержимое которых переносится в модель автоматически, так?

Вид, на всякий случай, такой:
def add_picture(request):
	if request.method == 'POST':
		form = PictureUploadForm(request.POST, request.FILES)

		if form.is_valid():
			form.save(commit=True)
		else:
			print form.errors
	else:
		form = PictureUploadForm()

	return render(request, 'add_picture.html', {'form': form})

Картинка сохраняется с тем же именем, которое было у неё при загрузке. То есть, как у пользователя. А мне нужно, чтобы ей выдавалось имя вида < ID>.<расширение>, т. к. у меня ID является primary_key и не повторяется. Как это сделать?
  • Вопрос задан
  • 530 просмотров
Пригласить эксперта
Ответы на вопрос 2
dizballanze
@dizballanze
Software developer at Yandex
Обычно используют параметр upload_to поля FileField от которого наследуется ImageField.
Но, т.к. вам нужно сначала сохранить инстанс, чтобы знать его ID (в случае добавления), придется использовать сигнал модели post_save в обработчике которого уже переименовывать файл и сохранять значение поля в базе данных.
Ответ написан
Комментировать
un1t
@un1t
Нужно сделать свой FileField или ImageField и перопределить метод generate_filename
https://github.com/django/django/blob/master/djang...
До модели можно добраться соотвественно через self.instance.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы