0

django モデルにオプションのイメージフィールドを設定したいと考えています。以下のコードを入力した後、place_4_view を除くすべてのイメージフィールドに画像を入力します。アップロード ボタンをクリックすると、エラーが発生します。私は何が欠けていますか?

モデル

class Findme(models.Model):
   place_2_view=models.ImageField(upload_to="photos",blank=True,null=True)
   place_3_view=models.ImageField(upload_to="photos",blank=True,null=True)
   place_4_view=models.ImageField (upload_to="photos",blank=True,null=True,help_text='Optional.')

アップロード時のエラー

Request Method: POST
Request URL:    http://127.0.0.1:8000/find/
Django Version: 1.4
Exception Type: MultiValueDictKeyError
Exception Value:    "Key 'place_4_view' not found in <MultiValueDict: {u'place_2_view': [<TemporaryUploadedFile: 2012-05-17-289.jpg (image/jpeg)>], u'place_3_view': [<TemporaryUploadedFile: Crimo.JPG (image/jpeg)>]}>"
Exception Location: C:\Python27\lib\site-packages\django\utils\datastructures.py in __getitem__, line 258
Python Executable:  C:\Python27\python.exe

ビュー

    def findpic(request):
        extra_data_context={}
           #if there's nothing in the field do nothing.
           if request.method=="POST":
              form=FindmeForm(request.POST, request.FILES)
              if form.is_valid():
                 data=form.cleaned_data
                    newfindmes=Findme(
                        user=request.user,
                        pub_date=datetime.datetime.now(),
                        place_2_view=request.FILES['room_2_view'],
                        place_3_view=request.FILES['room_3_view'],
                        place_4_view=request.FILES['room_4_view'])
                    newfindmes.save()
              extra_data_context.update({'FindmeForm':form})
         else:
             form = FindmeForm()
             extra_data_context.update({'FindmeForm':form})
        extra_data_context.update({'Findmes':Findme.objects.filter(user=request.user)})
        return render_to_response('postme.html',extra_data_context,context_instance=RequestContext(request))

テンプレート

        {% block content %}


        <form enctype="multipart/form-data"  form action="." method="POST">
       {% csrf_token %}
             <div class="post-fed">{{ FindmeForm.as_p}}</div>
             <input type="submit" value="Get It"/> 
              </form>



           {% for Findme in Findmes.object_list %}
         <tr>
         <p> {{Findme.pub_date|timesince }} ago </p> 
   <p><img src="{{Findme.thumbnail_2.url}}" width="83" height="78">
    <img src="{{Findme.thumbnail_3.url}}" width="83" height="78"> {% if Findme.thumbnail_4 %} <img src="{{Findme.thumbnail_4.url}}" width="83" height="78"/>
          {% endif %}  
        <p> Created By {{ Findme.user }}</p>
        {% endfor %}
        {% endblock %}
4

1 に答える 1

0

フォームの送信中にキーがフォームにあることを期待するコードがあるようです。

編集: findPic メソッドはフィールドを取得しようとしていますが、空の場合はフィールドがありません。request.FILES.get の使用をお勧めします そして、デフォルト値を指定するか、キーの存在について request.FILES をテストするか、キー自体を反復処理します。基本的に、コードは request.FILES に対して準備する必要があります。空にするか、アクセスしようとしているすべてのフィールドを含めないでください。

request.FILES.get の使用例については、この回答を参照してください。request.FILES オブジェクトのその他の詳細については、Files Django Docsを参照してください。

于 2012-07-14T15:57:40.467 に答える