2016-09-14 3 views
1

Я работаю над проектом, который позволит пользователю загружать изображение. Загруженное изображение позже отобразится и будет передано в другую форму. Для этого мне нужно получить URL-адрес изображения загруженного изображения. Вот мой код:Django переименовать загруженное изображение url

def inputImage(request): 
    if request.method == 'POST': 
     form = ImageDetailsForm(request.POST, request.FILES) 
     if form.is_valid(): 
      form.save() 
      message = "The image was successfully uploaded!" 
      imageName = str(request.FILES['image'].name) 
      imageURL = settings.MEDIA_URL + "/" + imageName 
     return render(request,'success.html', {'message': message, 'image': imageURL}) 

код работает, однако проблема может произойти, если пользователь загружает файл с существующим именем файла в хранилище. Для того, чтобы избежать конфликта, Django автоматически переименовывает файл, но линия

imageName = str(request.FILES['image'].name) 

возвращает только оригинальное имя файла загруженного изображения. Я также пытался использовать

imageName = str(form.cleaned_data['image'].name) 

но все равно никаких изменений. Она возвращает «/media//1.png» вместо «/media//1_0rnKMaT.png»

Любые идеи о том, как получить URL текущей загрузки в Django?

Edit: вот мой models.py:

class ImageDetails(models.Model): 
    image = models.ImageField(null=True) 

и мой forms.py

class ImageDetailsForm(forms.ModelForm): 
    class Meta: 
     model = ImageDetails 
     fields= ('image') 
     widgets = { 
      'status': forms.HiddenInput(), 
     } 
+0

Да, но возвращает ошибку, в которой говорится, что форма не имеет объекта «image», но на самом деле это одно из полей формы. – jonilyn2730

ответ

0

Вы можете получить доступ к сохраненной модели экземпляра через form.instance, так что вы должны быть в состоянии получить имя сохраненного файла с form.instance.image_field_name.name, где image_field_name - это имя поля изображения в вашей модели.

+0

Это решило проблему. Большое спасибо! – jonilyn2730