2017-10-22 6 views
0

/accounts/upload_save/ "'画像' 'には、 MultiValueDictKeyErrorというエラーが発生しました。 ファイルアップロードシステムを作っています。ファイルを選択して「送信」ボタンを押すと、選択した画像がmodel.Butに送られます。画像を選択せず​​に「送信」ボタンを押すと、エラーが発生します。画像を選択せず​​に「送信」ボタンを押すと、​​というメッセージが表示されます。MultiValueDictKeyError/accounts/upload_save/

は私がforms.py

class UserImageForm(forms.ModelForm): 
     class Meta: 
      model = ImageAndUser 
      fields = ('image',) 
にurls.py

urlpatterns = [ 
    url(r'^upload_save/$', views.upload_save, name='upload_save'), 
] 

にviews.py

@login_required 
@csrf_exempt 
def upload_save(request): 
    if request.method == "POST": 
     form = UserImageForm(request.POST, request.FILES) 
     if form.is_valid(): 
      data = form.save(commit=False) 
      data.user = request.user 
      data.image = request.FILES['image'] 
      data.save() 
     else: 
      print(form.errors) 
    else: 
     form = UserImageForm() 

    return render(request, 'registration/photo.html', {'form': form}) 

に書いた

<div class="container" id="photoform"> 
      {% if form.errors %} 
      <div class="alert alert-danger" role="alert"> 
      <p>You should select at least one photo</p> 
       </div> 
       {% endif %} 

      <form action="/accounts/upload_save/" method="POST" enctype="multipart/form-data"> 
      {% csrf_token %} 

        <div class="input-group"> 
       <label class="input-group-btn" style="width: 30%;"> 
        <span class="btn btn-primary btn-lg"> 
        File Select1 
        <input type="file" name="image"> 
        </span> 
       </label> 
          <input type="text" class="form-control" readonly=""> 
        </div> 

        <div class="input-group"> 
       <label class="input-group-btn" style="width: 30%;"> 
        <span class="btn btn-primary btn-lg"> 
        File Select2 
        <input type="file" name="image2"> 
        </span> 
       </label> 
          <input type="text" class="form-control" readonly=""> 
        </div> 
         
        <div class="input-group"> 
       <label class="input-group-btn"> 
        <span class="btn btn-primary btn-lg"> 
        File Select3 
        <input type="file" name="image3"> 
        </span> 
       </label> 
          <input type="text" class="form-control" readonly=""> 
        </div> 


      <div class="form-group"> 
       <input type="hidden" value="{{ p_id }}" name="p_id" class="form-control"> 
      </div> 
       <div class="form-group"> 
       <input type="submit" value="SEND" class="form-control"> 
       </div> 
      </form> 
     </div> 

photo.htmlに書きましたこのエラーはなぜ起こるか私がもし-else文を書いて、私はどのように?この問題を解決するために.Whatを行う必要がありelse文で印刷(form.errors)をworteので、私は本当に理解することはできませんmodels.py

class ImageAndUser(models.Model): 
    user = models.ForeignKey("auth.User", verbose_name="imageforegin") 
    image = models.ImageField(upload_to='images', null=True, blank=True,) 

    date = models.IntegerField(max_length=100,null=True) 

私はそれを書くことはできますか?

+0

あなたのviews.pyを変更] 'が失敗しています...それで、それを修正して、入力フォームに' required'を追加して、クライアントが空のイメージでフォームを送信しないようにしておくとよいでしょう。 –

+0

@JonClements thx ur comments.Iのurメッセージを読んだが、私はそれを書く方法を理解できない。あなたは答えにあなたの意図したコードを書くことができますか? – user8504021

+0

あなたの質問を編集して 'UserImageForm'を含めると誰かが助けることができます –

答えて

0
class UserImageForm(forms.ModelForm): 
    image = forms.ImageField() 
    class Meta: 
     model = ImageAndUser 
     fields = ('image',) 

、それは...あなたの `image`フィールドが存在することを検証ので、` request.FILES [ 'イメージ' しないようにあなたの `UserImageForm`が見え

@login_required 
@csrf_exempt 
def upload_save(request): 
    if request.method == "POST": 
     form = UserImageForm(request.POST, request.FILES) 
     if form.is_valid(): 
      data = form.save(commit=False) 
      data.user = request.user 
      data.image = form.cleaned_data['image'] 
      data.save() 
     else: 
      print(form.errors) 
    else: 
     form = UserImageForm() 

    return render(request, 'registration/photo.html', {'form': form}) 
+0

これは 'image'を必須のフォームフィールドにする方法です。代わりにあなたのフォームで '__init__'をオーバーライドし、' self.fields ['image']。required = True'を設定します。 – dirkgroten