2016-09-14 1 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を取得する方法上の任意のアイデアをのを返しますか?

編集:ここ は私の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

はい、フォームに 'イメージ'オブジェクトがありませんが、実際にフォームフィールドの1つだったというエラーが返されます。 – jonilyn2730

答えて

0

あなたが得ることができる必要がありますので、あなたは、form.instanceを通じて保存されたモデルのインスタンスにアクセスすることができますform.instance.image_field_name.nameで保存されたファイルの名前。image_field_nameは、モデル内のイメージフィールドの名前です。

+0

それが問題を解決しました。どうもありがとう! – jonilyn2730

関連する問題