ビューで初期化するフォームセットがあります。フォームのフィールドの 1 つが FileField です。そして、以前のファイル名の名前をユーザーに表示する必要があります。FileFieldの初期化ができないので、ファイル名をリストで送りたい。(たとえば、Charfield がある場合は、ビューで初期化でき、テンプレートにレンダリングすると、そのデータで満たされた入力が表示されますが、ファイル アップロード フィールドがある場合は、ビューでそれを埋めることができず、テンプレートに送信します)。フォームセットとリストのフォームを同時にループする方法がわかりません。もう1つは、フォームセットでフォームを初期化し、テンプレートにレンダリングするときです(たとえば、書き込みますdata['form-0-Team']='team1'
が、書き込みはできませんdata['form-0-Team']='a.png'
、そのため、テンプレートにレンダリングすると、「チーム」という名前のフィールドが入力され (値 = team1)、「ファイル」という名前のフィールドが入力されず、「thid フィールドが必要です」というエラー ID が表示されます。) このページにアクセスするのは初めてですが、私のメソッドは POST ではありません。(通常、ユーザーが送信をクリックするとフォームエラーが表示され、ビューでrequest.method == 'POST'かどうかがチェックされ、次にform.is_validかどうかがチェックされ、テンプレートに戻ってエラーが表示されますが、私の場合はユーザーが初めてページにアクセスし、データを投稿する前)。私は私の問題を言うことができればいいのにと思います。これを解決する方法を教えてください。本当にありがとう。
def myFunc(request):
flagFormSet = formset_factory(FlagFileBaseForm)
if request.method == 'POST':
formset = flagFormSet(request.POST, request.FILES)
if formset.is_valid():
# do s.th
else:
data = {
'form-TOTAL_FORMS': 5,
'form-INITIAL_FORMS': u'0',
'form-MAX_NUM_FORMS': u'',
# add initial form data to it
}
list=['a.png', 'b.png', 'c.png', 'd.png' , 'f.png']
formset = flagFormSet(data)
return render_to_response('myPage.html', RequestContext(request, { 'formset': formset, 'list':list}))
そして私のテンプレート:
<form method="post" action="" enctype="multipart/form-data">
{{ formset.management_form }}
{% for form in formset.forms %}
<div class="form">
<div class="form-row Team">
<div>
<label class="required" for="id_Team">Team:</label>
{{ form.Team }}
{{ form.Team.errors }}
</div>
</div>
<div class="form-row File">
<div>
<label class="required" for="id_File">File:</label>
{{ form.File }}
{{ form.File.errors }}
</div>
#here i want show the name of previous file
</div>
</div>
{% endfor %}
</form>
EDIT:現在の結果(リクエストが投稿されていない間、エラーが表示されます)
望ましい結果 (ファイル名でエラーのないフォーム)