2013-03-10 37 views
0

我有一個formset,我在視圖中初始化它。表單的一個字段是FileField。我必須向用戶顯示他/她以前的文件名的名稱。因爲我無法初始化FileField,所以我想發送列表中的文件名。 (例如,當你有一個Charfield時,你可以在視圖中初始化它,當你渲染到模板時,你會看到一個填充了這些數據的輸入,但是當你有文件上傳字段時,你不能在視圖中填充它,發送到模板)。我不知道如何在formset和列表中同時循環表單。另一件事是當我初始化formset和呈現模板(我的意思是例如寫data['form-0-Team']='team1',但我不能寫data['form-0-Team']='a.png',所以當我渲染模板時,我看到名爲'團隊'字段填充(值= team1 )和名爲'文件'的字段未填寫,並顯示錯誤「需要填寫字段」ID)。雖然這是我第一次訪問此頁面,但我的方法不是POST。 (USUALLY表單錯誤顯示當用戶點擊提交,並在視圖中檢查,如果request.method =='POST',然後檢查如果form.is_valid,它返回到模板並顯示錯誤,但在我的,它顯示錯誤第一次用戶訪問該頁面並且在他/她發佈數據之前)。 我希望我能說我的問題。你能指導我解決這個問題嗎?真的感謝。在formset和列表中同時循環表單+ FileField所需的錯誤:django

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> 

編輯: 當前結果(同時請求未發佈,則顯示錯誤) enter image description here

期望的結果(形式不與文件名錯誤) enter image description here

+1

我不明白對不起 – catherine 2013-03-10 08:04:39

+0

我認爲你可能需要重新寫一下你的問題。當你說'我無法初始化FileField'或'當我初始表格'時,你是什麼意思? '初始'是一個形容詞而不是動詞。 (既然你在問題的前面已經正確地使用了'initialize'這個詞,假定這不是你的意思,這似乎是公平的)。 – 2013-03-10 08:27:29

+0

如果我問我的問題不好,我真的很抱歉。我重寫它並希望你明白。非常感謝 – user1597122 2013-03-10 09:20:05

回答

0

我怕我真的不明白你的問題,所以道歉,如果這沒有幫助..

如果你的列表是任意的(從你的問題來看),那麼你可以使用內置在forloop counter中的django構造你的文件名 -

{% for form in formset %} 
    {{ form }} 
    <input type="text" name="file_name" value="{% forloop.counter %}.png"> 
{% endfor %} 

或者看看python的zip function。您可以使用它來構建包含名稱和表單的對象,並將其傳遞給您的模板。

+0

我填寫數據庫中的列表項。在這個例子中,我寫a.png和...來簡化它,但實際上我填充了存儲在數據庫中的fileNames列表。對不起,如果我不能完全問我的問題。 – user1597122 2013-03-10 10:26:38

+0

我已經用另一個建議更新了我的答案。 – 2013-03-10 13:36:14

+0

非常感謝...你知道在我的情況下,formset和list中有表單。我不認爲我可以壓縮他們,我可以嗎? :「> – user1597122 2013-03-10 16:04:09