2017-07-06 12 views
0

何らかの理由で、Djangoで使用しようとしているフォームが有効ではないと考えられます。このコードは、動作すると主張しているサイトからほぼ直接取得されますが、まだ機能していません。 私のコードは以下の通りです。Django画像アップロードフォームが無効です

VIEWS

def display_update_image(request, pk): 
if request.method == 'POST': 
    form = ImageForm(request.POST, request.FILES) 
    if form.is_valid(): 
     display = Display.objects.get(pk = pk) 
     display.image = form.cleaned_data['image'] 
     display.save() 
    return HttpResponseRedirect(reverse('displays')) 
else : 
    form = ImageForm() 
return render(request, 'catalog/update_display_image.html', {'form': form}) 

TEMPLATE(テンプレート名がupdate_display_image.htmlです)

<form method = "post" enctype = "multipart/form-data">{% csrf_token %} 
<p> 
    <input id = "id" type = "file" class = "" name = "image"> 
</p> 
<input type = "submit" value = "Submit" /> 

MODELS

class Display(models.Model): 
    title = models.CharField(max_length = 50,) 
    image = models.ImageField(upload_to = 'images') 
    id = models.UUIDField(primary_key = True, default = uuid.uuid4, unique = True) 

    def __str__(self): 
     return self.title 

編集:申し訳ありませんフォームコードを投稿することを忘れ

class ImageForm(forms.Form): 
    image = forms.ImageField() 

さらに編集:この

class ImageForm(forms.Form): 
    class Meta: 
     model = Display 
     fields = ('image',) 

に私のフォームクラスを変更するには、フォームが、私は理由を理解していないものの、いくつかの理由で有効なものとして読むことができるようにします。それはもはやあなたはこの1つのようなDjangoのフォームを持っているforms.pyチェックで

display.image = form.cleaned_data['image'] 
+0

あなたは 'ImageForm'のコードを投稿できますか? –

+0

モデルのフォームクラスは 'class ImageForm(forms.ModelForm):' –

答えて

2

クラスを作成する場合は、モデルフォーム:class ImageForm(forms.ModelForm):インスタンスをフォームに渡して保存することができます。

def display_update_image(request, pk): 
    if request.method == 'POST': 
     display = Display.objects.get(pk = pk) 
     form = ImageForm(request.POST, request.FILES, instance=display) 
     if form.is_valid(): 
      form.save() 
     return HttpResponseRedirect(reverse('displays')) 
    else : 
     form = ImageForm() 
    return render(request, 'catalog/update_display_image.html', {'form': form}) 
+0

このメソッドはうまく機能しました。助けてくれてありがとう! – user8265778

+0

あなたは大歓迎です! –

0

を読み込むことはできません残念ながら、私の見解方法が適切に機能することができないために発生している:template

class ImageForm(forms.ModelForm): 
    class Meta: 
     model = Display 
     fields = ['image',] 

代わり{{ form }}を追加

<form method='post' enctype='multipart-formdata> 
{% csrf_token %} 
{{ form }} 
<input type='submit' value='Update Image'> 
+0

である必要があります。ああ申し訳ありませんが、似たようなフォームを持っていると言いました。これらの2つのファイルを、フォームは有効です。残念ながら、私はsubmitを押すと form.cleaned_data ['image']を私の意見から認識しません。 – user8265778

+0

@ user8265778取得しているエラーを貼り付けることはできますか? –

+0

KeyError/catalog/display/97ee7328-ccda-447d-b454-2ac53b0bf831/update-image/ 例外の場所は、上記の行です – user8265778

関連する問題