2013-06-11 34 views
1

即時通訊在一個視圖內顯示錶單錯誤時遇到一些麻煩。我目前是一名學生,已經參加了兩個學期的Python課程。我決定自己學習一些Django。Django multiple forms 1 view..Form error issue

我遇到的問題是,即時嘗試有一個多步驟的過程,所以用戶可以發佈一本書。但是,我想在同一個網址內完成。所以當用戶完成第一個表單並點擊提交時,它會繼續到下一個表單,但url不會改變。我已經明白了這一點。我的問題是,當我到達第二個窗體時,已經有表單顯示的窗體出現錯誤。我昨天花了3個小時試圖弄清楚,沒有運氣。 因此,如果任何人都可以伸出援助之手,那就太棒了!謝謝!

def book_post(request): 
    if request.method == 'POST': 
     formone = bookFormOne(request.POST)   
     formtwo = bookFormTwo(request.POST, request.FILES) 
     if formtwo.is_valid(): 
      #.....do form2 valid stuff 
      return HttpResponseRedirect('/success')   
     if formone.is_valid() : 
      #....do form1 valid stuff 
      #formtwo = bookFormTwo()..if i add this the errors wont display but then errors from the first form spill over and it wont allow the second form to be valid...### 

      args = {'form2':formtwo,'isbn':isbn,'subject':subject} 
      args.update(csrf(request)) 
      return render_to_response('book_post_form2.html', args,context_instance=RequestContext(request))   

     else: 
      args = {} 
      args['form'] = formone 
      args['form2'] = formtwo 
      args.update(csrf(request))    


    else: 
     form = bookFormOne() 
     args = {'form':form} 
     args.update(csrf(request)) 
    return render_to_response('book_post.html', args,context_instance=RequestContext(request)) 
+0

這不是很乾淨的邏輯。有一個'step_number'作爲上下文變量,並根據它來驗證表單。這樣,你可以驗證正確的步驟沒有任何問題 – karthikr

+0

@karthikr我怎麼能做到這一點?你介意多給點解釋一下。謝謝! –

+0

我猜肖恩是有點像我會建議的。 – karthikr

回答

1

您沒有任何情況顯示空的formtwo。將request.POST傳遞給表單並調用is_valid()將導致驗證運行,這可能不是您在用戶POSTS formone時想要的。正如@ karthikr所建議的那樣,您需要找出一種方法來說明您的步驟,以便您可以驗證並顯示適當的表單。

當渲染book_post_form2.html時,最簡單的方法可能是在渲染book_post.html和args ['step'] = 2時添加類似args ['step'] = 1的內容。然後使用隱藏的表單字段在POST上再次將該變量傳遞迴服務器,然後檢查它以確定需要驗證哪種表單。

+0

感謝您的幫助!我現在很好地工作了!再次感謝! –

+0

很好的解釋。 – karthikr