0

私のdjango/pythonコードには非常に単純なエラーがあると確信しています。基本的に、私は (今のところ) いくつかのドロップダウン リストとファイル アップロード機能を備えた単純な html フォームを作成しようとしています。次のコード スニペットがあります。

ビュー.py:

def convert(request):
if request.POST:
    form = ConvertForm(request.POST,request.FILES)

    if form.is_valid():
        form.save()

        # Change this to some result page,                                                   
        # but for now, just see that we got the file                                         
        return HttpResponseRedirect('/convert/convert')
else:
    form = ConvertForm()

args = {}
args.update(csrf(request))
args['form']=form

return render_to_response('convert.html',args)

convert.html で:

{% block content %}  
 <form action="/convert/convert/" method="post" enctype="multipart/form-data">{% csrf_token %}  
 <ul> 
  {{ form.as_ul }}  
 </ul> 
 <input type="submit" name="submit" value="Convert"> 
 </form>   
{% endblock %}  

そして私のforms.pyで:

from django import forms

class ConvertForm(forms.Form):
    ff_from = forms.ChoiceField(choices=('a'))
    ff_to = forms.ChoiceField(choices=('b'))
    file = forms.FileField(max_length=200)

私が得ているエラーは次のとおりです。

/convert/convert/ での ValueError は
、アンパックするために複数の値が必要です
要求メソッド: GET
Django バージョン: 1.5.2
例外タイプ: ValueError
例外値:
アンパックするには、複数の値が必要です

テンプレート レンダリング中のエラー
テンプレート /path/to/templates/convert.html の 16 行目のエラー

しかし、私はその理由を理解できません。私はdjangoの初心者ですが、Pythonには慣れています。convert.html の 16 行目は、

{{ form.as_ul }} 

コードの一部。

現在、私は自分のウェブサイトにフォームを表示することだけを試みています。何かをさせるよりもはるかに少ないです!

ここに質問を投稿することに慣れていないので、この説明が完全かどうか教えてください! ありがとう!

4

1 に答える 1

2

に対するあなたの議論は's ではchoices正しくありません。ChoiceField

ドキュメントに従って:

choices

このフィールドの選択肢として使用する2タプルのイテラブル(例: リストまたはタプル) 。この引数は、モデル フィールドへのchoices 引数と同じ形式を受け入れます。詳細については、選択肢に関するモデル フィールドのリファレンス ドキュメントを参照してください。

あなたの場合、単一の要素があります。少なくとも次のものが必要です。

choices=[('a_code', 'A Pretty Display Value')]

マインド:

  • リスト
  • タプルの 2 つの要素

もちろん、ChoiceField単一の選択肢を持つ は、実際には選択肢ではありません。次のことを検討してください。

[
    ('a_code', u'A Pretty Display Value'), 
    ('another_code', 'Another pretty display value')
]
于 2013-08-20T21:07:01.280 に答える